目錄
8.7? shell 編程
8.7.1? shell 編程的基本過(guò)程
8.7.2? 實(shí)例
8.7.3? shell 程序和語(yǔ)句
8.8? 說(shuō)明性語(yǔ)句和功能性語(yǔ)句
8.8.1? 說(shuō)明性語(yǔ)句(注釋行)
8.8.2? 常用的功能性語(yǔ)句
8.9? 結(jié)構(gòu)性語(yǔ)句
8.9.1? 條件語(yǔ)句 if
8.9.2? 測(cè)試語(yǔ)句 test
8.9.3? 多路分支語(yǔ)句 case…esac
8.9.4? 循環(huán)語(yǔ)句 for…do…done
8.9.5? 循環(huán)語(yǔ)句 while…do…done
8.9.6? 循環(huán)控制語(yǔ)句 break 和 continue
8.7? shell 編程
8.7.1? shell 編程的基本過(guò)程
包含以下三步:
- 創(chuàng)建 shell 文件,即后綴名為 .sh 的文件
- 賦予 shell 文件執(zhí)行權(quán)限,即使用 chmod 命令修改權(quán)限
- 執(zhí)行 shell 文件,即在命令行調(diào)用 shell 文件
8.7.2? 實(shí)例
r=4,w=2,x=1
若要rwx屬性,則4+2+1=7
若要rw-屬性,則4+2=6
若要r-x屬性,則4+1=5
8.7.3? shell 程序和語(yǔ)句
shell 程序由零至多條 shell 語(yǔ)句構(gòu)成。
shell 語(yǔ)句以下三大類:
- 說(shuō)明性語(yǔ)句:以 # 號(hào)開(kāi)始到行尾的部分,不被解釋執(zhí)行。
- 功能性語(yǔ)句:任意的 OS 命令、shell 內(nèi)部命令、自編程序、其它 shell 程序名等。
- 結(jié)構(gòu)性語(yǔ)句:條件測(cè)試語(yǔ)句、多路分支語(yǔ)句、循環(huán)語(yǔ)句、循環(huán)控制語(yǔ)句等。??????????? ?
8.8? 說(shuō)明性語(yǔ)句和功能性語(yǔ)句
8.8.1? 說(shuō)明性語(yǔ)句(注釋行)
注釋行可以出現(xiàn)在程序中的任何位置,既可以單獨(dú)占用一行,也可以接在執(zhí)行語(yǔ)句的后面。以 # 號(hào)開(kāi)始到所在行的行尾部分,都不被解釋執(zhí)行。例如:
#! /bin/sh 告訴OS用哪種shell來(lái)解釋執(zhí)行程序
#
# 本程序說(shuō)明
#
cmd1
cmd2 # cmd2的語(yǔ)句說(shuō)明
8.8.2? 常用的功能性語(yǔ)句
1、read 命令
read 從標(biāo)準(zhǔn)輸入讀入一行,并賦值給后面的變量。注意:執(zhí)行 read 語(yǔ)句時(shí),shell 程序?qū)?huì)等待你的一個(gè)標(biāo)準(zhǔn)輸入,而一旦回車(chē)就代表輸入結(jié)束,因此必須在一行中輸入完畢。
把讀入的數(shù)據(jù)全部賦給 var,語(yǔ)法格式如下:
read var
把讀入行中的第一個(gè)參數(shù)賦給 var1,第二個(gè)參數(shù)賦給 var2,……,語(yǔ)法格式如下:
read var1 var2 var3
如果執(zhí)行 read 語(yǔ)句時(shí)標(biāo)準(zhǔn)輸入無(wú)數(shù)據(jù),則程序在此停留等待,直到數(shù)據(jù)的到來(lái)或被終止運(yùn)行:
當(dāng)變量個(gè)數(shù)和參數(shù)個(gè)數(shù)不匹配時(shí),將會(huì)把剩下的所有參數(shù)賦給最后一個(gè)變量:
2、expr 命令
算術(shù)運(yùn)算命令 expr 主要用于進(jìn)行簡(jiǎn)單的整數(shù)運(yùn)算,包括:加 (+)、減 (-)、乘 (\*)、整除 (/) 和求模 (%) 等操作。例如:
$ expr 12 + 5 \* 3
27
$ expr 3 - 8 / 2
-1
$ expr 25 % 4
1
$ num=9
$ sum=`expr $num \* 6`
$ echo $sum
54
沒(méi)有 expr 就不能進(jìn)行算術(shù)運(yùn)算:
8.9? 結(jié)構(gòu)性語(yǔ)句
結(jié)構(gòu)性語(yǔ)句主要根據(jù)程序的運(yùn)行狀態(tài)、輸入數(shù)據(jù)、變量的取值、控制信號(hào)以及運(yùn)行時(shí)間等因素來(lái)控制程序的運(yùn)行流程。主要包括以下幾類語(yǔ)句:
- 條件測(cè)試語(yǔ)句(兩路分支)
- 多路分支語(yǔ)句
- 循環(huán)語(yǔ)句
- 循環(huán)控制語(yǔ)句
無(wú)任何結(jié)構(gòu)性語(yǔ)句的shell腳本程序是一種特例。
8.9.1? 條件語(yǔ)句 if
語(yǔ)法結(jié)構(gòu):
if 表達(dá)式
then 命令表1
else 命令表2
fi
創(chuàng)建 test.sh 文件:
if [ -f file1 ]
then
echo "文件file1存在"
else
echo "文件file1不存在"
fi
- -f:如果 filename為常規(guī)文件,則為真
- -d:如果 filename為目錄,則為真
- [ ]:和表達(dá)式兩側(cè)必須要有一個(gè)空格
執(zhí)行 test.sh 文件:
初始由于沒(méi)有為其賦予權(quán)限,因此執(zhí)行失敗,于是我們使用 chmod 命令修改其權(quán)限。
8.9.2? 測(cè)試語(yǔ)句 test
test 語(yǔ)句可測(cè)試的三種對(duì)象:
- 字符串
- 整數(shù)
- 文件屬性
test 命令測(cè)試的條件成立時(shí),命令返回值為真(0),否則返回值為假(非 0)
① 用法一
name="anyujin"
test $name == $1
echo $?
② 用法二
if test -f file1
then
echo "文件file1存在"
else
echo "文件file1不存在"
fi
通常把 test 簡(jiǎn)寫(xiě)為 [? ] :
if [ -f file1 ]
即用方括號(hào)替代了 test 語(yǔ)句,注意方括號(hào)和表達(dá)式之間至少要有一個(gè)空格。
8.9.3? 多路分支語(yǔ)句 case…esac
case 字符串變量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
...
*)
命令表n
;;
esac
檢查用戶輸入的文件名:
# 要求輸入一個(gè)命令行參數(shù)
if [ $# -ne 1 ]
then
echo "One argument must be declared."
exit
fi
# 檢查用戶輸入的文件
case $1 in
file1)
echo "User selects file1."
;;
file2)
echo "User selects file2."
;;
*)
echo "You must select either file1 or file2!"
;;
esac
執(zhí)行上述 shell 程序:
8.9.4? 循環(huán)語(yǔ)句 for…do…done
當(dāng)循環(huán)次數(shù)已知或確定時(shí),使用 for 循環(huán)語(yǔ)句來(lái)多次執(zhí)行一條或一組命令。循環(huán)體由語(yǔ)句括號(hào) do 和 done 來(lái)限定。格式為:
for 變量名 in 單詞表
do
命令表
done
① 用法一
for num in "1" "3" "5"
do
echo "$num"
done
② 用法二
for num in {1..5}
do
echo "$num"
done
③ 用法三
# 判斷并創(chuàng)建目錄backup
if [ ! -d $HOME/backup ]
then
mkdir $HOME/backup
fi
# 修改工作路徑
cd /home/envoutante/桌面
# 用flist存放當(dāng)前目錄的所有文件
flist=`ls`
# “圖片18.png”
num=18
# 循環(huán)flist中的所有文件
for file in $flist
do
# 修改文件名
mv ${file} 圖片${num}.png
file="圖片${num}.png"
# 復(fù)制文件到backup
cp $file $HOME/backup
echo "$file copied"
# 計(jì)數(shù)器加一
num=`expr $num + 1`
done
echo '***Back up completed***'
8.9.5? 循環(huán)語(yǔ)句 while…do…done
語(yǔ)法結(jié)構(gòu)為:
while 命令或表達(dá)式
do
命令表
done
創(chuàng)建文件程序,參數(shù) 1 為文件名開(kāi)頭,參數(shù) 2 為創(chuàng)建個(gè)數(shù):
8.9.6? 循環(huán)控制語(yǔ)句 break 和 continue
break 語(yǔ)句從包含該語(yǔ)句的最近一層循環(huán)中跳出一層,break? n 則跳出 n 層;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-492818.html
continue 語(yǔ)句則馬上轉(zhuǎn)到最近一層循環(huán)語(yǔ)句的下一輪循環(huán)上,continue n 則轉(zhuǎn)到最近 n 層循環(huán)語(yǔ)句的下一輪循環(huán)上。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-492818.html
到了這里,關(guān)于DJ8-4 shell 語(yǔ)句的分類、shell 的結(jié)構(gòu)性語(yǔ)句的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!