shell腳本
1平项,字符串的操作
1)若打印時(shí)有空格赫舒,則應(yīng)“$變量名”;
若字符串賦值時(shí)闽瓢,若值中有空格接癌,變量名 = “hello, world扣讼!”
應(yīng)用雙引號(hào)括起來缺猛。
2)字符串的長(zhǎng)度
lenth=${#string}
#!bin/bash
string="hello,"
stirng1="shell!"
echo ${#stirng}
#后不是字符串表示的是字符串的長(zhǎng)度。
3)字符串的分割
nstr=${string:a:b}
#!/bin/bash
string="hello,"
string1="shell!"
echo nstr=${string:a:b}
echo nstr1=${string1:a:b}
把字符串string從第a個(gè)之后開始截取b個(gè)字符,把值賦給新的變量
2椭符,只讀readonly
#!/bin/bash
readonly num=7
echo $num
num=66
echo $num```
打印出來會(huì)在第二次賦值時(shí)出錯(cuò)荔燎,兩次打印結(jié)果均為7。(只讀變量不可更改销钝。)
3有咨,清除變量的值
num=333
echo $num
unset num
echo $num```
使變量的值為空
4,注意問題
shell程序必須指定解釋程序的第一行必須是:#!/bin/bash
;
賦值時(shí)等號(hào)兩邊不能加空格蒸健。
5座享,read
從鍵盤中獲取數(shù)值
#!/bin/bash
echo "input num:"
read num
echo $num
read
:在沒有輸入時(shí),則一直等待輸入
read 變量1 變量2 變量3
此情況不建議使用似忧,需要輸入空格
建議使用:read 變量1
read 變量2
read 變量3
#!/bin/bash
echo "input date:year month day
read year month day
echo "press key to contine:"
read KEY
echo "the date is:$year/$month/$day"
6渣叛,shell的三大語句
說明型語句、功能型語句橡娄、結(jié)構(gòu)分支語句
(1)說明型語句
以#開頭的語句诗箍,至行末均為說明型語句,說明型語句不解釋執(zhí)行(整行)挽唉,即注釋滤祖;
說明型語句的位置可以是程序中的任何位置,可以放在解釋執(zhí)行語句之后瓶籽,從#開始的部分只注釋一行
(2)功能型語句
系統(tǒng)命令匠童,自寫程序....
(3)結(jié)構(gòu)型語句
多路分支語句,循環(huán)語句塑顺,循環(huán)控制語句汤求,測(cè)試語句俏险,條件語句
結(jié)構(gòu)型語句
7,加扬绪、減竖独、乘、除挤牛、取余
乘法要使用轉(zhuǎn)譯字符
expr
let
:針對(duì)裝束做簡(jiǎn)單的加莹痢、減、乘墓赴、除竞膳、取余
expr:
sum=`expr $num + $num1`
sum1=`expr $num \* $num1`
let:
let sum=num+num1
let sum1=num\*num1```
* 文件比較運(yùn)算符
`-e filename`:如果filename 存在為真
`-d filename`:如果filename 為目錄為真
`-f filename`:如果filename 為常規(guī)文件為真
`-L filename`:如果filename 為符號(hào)鏈接為真
`-r filename`:如果filename 可讀為真
`-w filename`:如果filename 可寫為真
`-x filename`:如果filename 可執(zhí)行為真
`filename1 -nt filename2`:如果filename1比filename2新,則為真
`filename1 -ot filename2`:如果filename1比filename2新诫硕,則為真
* 整數(shù)測(cè)試
`-eq`:相等
`-ne`:不等于
`-gt`:大于
`-ge`:大于等于
`-lt`:小于
`-le`:小于等于
字符串比較:
`-z string`:string長(zhǎng)度為零時(shí)坦辟,為真
`-n string`:string如果長(zhǎng)度非零,為真
`string1=stirng2`
`string1!=string2`
* 邏輯操作符:
`&&`:邏輯與
`事件1 && 事件2`:當(dāng)事件1和事件2都為真章办,則為真
`||`:邏輯與
`事件1||事件2`:當(dāng)事件1或事件2為真锉走,則為真
`-a:and`
`-o:or`
* 常見變量:
`$?`:命令執(zhí)行后返回的狀態(tài),返回0表示成功執(zhí)行纲菌,其他值表明執(zhí)行錯(cuò)誤
`$*`:所有參數(shù)列表
`$@`:所有參數(shù)列表
`$#`:傳遞到腳本的參數(shù)個(gè)數(shù)
`$0`:可執(zhí)行命令本身挠日,不是位置命令參數(shù)
`$1~$n`:分別表示第一至第n個(gè)位置的參數(shù)
`echo -n`:不換行輸出!
if語句
(1)
if [ 條件 ]
then
命令
fi```
(2)
if [ 條件 ]
then
命令
elif [ 條件 ]
then
命令
else
命令
fi```
case
case 值 in
值1)
命令
;;
值2)
命令;;
值3)
命令;;
esac
for循環(huán)
for 值 in 值列表
do
命令
done
while循環(huán)
while 條件
do
命令
done
###總結(jié)及計(jì)劃:
今天剛剛接觸shell編程翰舌,所以許多東西還要不斷琢磨嚣潜,感覺shell編程以后能提高使用終端的效率,感覺還是蠻重要的椅贱,所以打算明天自習(xí)的時(shí)間好好復(fù)習(xí)懂算,嘗試使用shell編寫一些簡(jiǎn)單的腳本,并且繼續(xù)預(yù)習(xí)C語言高級(jí)的部分庇麦。
###作業(yè):
1计技,使用while循環(huán)實(shí)現(xiàn)九九乘法表
!/bin/bash
for i in 1 2 3 4 5 6 7 8 9
do
for j in 1 2 3 4 5 6 7 8 9
do
sum=expr $i \* $j
printf "$j * $i = $sum "
if [ $j -eq $i ]
then
break;
fi
done
echo
done```
2,for或者while實(shí)現(xiàn)打印等腰三角形山橄,行數(shù)由用戶輸入
#!/bin/bash
echo -n "input a num:"
read num
i=1
while [ $i -le $num ]
do
j=1
#let sum=$num-$i
while [ $j -le $(($num-$i)) ]
do
echo -n " "
let j++
done
let sum1=2*$i-1
j=1
while [ $j -le $sum1 ]
do
echo -n "*"
let j++
done
let i++
echo
做這道題出現(xiàn)的問題垮媒,對(duì)j的初始化位置未放置正確,導(dǎo)致浪費(fèi)大量時(shí)間調(diào)試航棱,主要原因:對(duì)全局變量和局部變量作用域的理解不夠到位
3睡雇,寫一個(gè)腳本,判斷給定目錄下的文件屬性
#!/bin/bash
echo "Please enter a filename:"
read filename
if [ -e $filename ];then
if [ -f $filename ];then
echo "$filename is a 常規(guī)文件"
elif [ -d $filename ];then
echo "$filename is a 目錄"
elif [ -L $filename ];then
echo "$filename is a 復(fù)航鏈接"
fi
else
echo "文件不存在"
fi```
4饮醇,預(yù)習(xí)C語言課本前三四五章它抱,下周進(jìn)入C部分的學(xué)習(xí)
已完成