小編給大家分享一下shell腳本中for語(yǔ)句、if語(yǔ)句怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端成都網(wǎng)站建設(shè)、成都網(wǎng)站制作公司、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)營(yíng)銷(xiāo)推廣、微信平臺(tái)小程序開(kāi)發(fā)、微信公眾號(hào)開(kāi)發(fā)、成都網(wǎng)站營(yíng)銷(xiāo)服務(wù),提供專業(yè)營(yíng)銷(xiāo)思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為咖啡廳設(shè)計(jì)企業(yè)提供源源不斷的流量和訂單咨詢。上部:
面向過(guò)程:
順序執(zhí)行
選擇執(zhí)行: if, case
循環(huán)執(zhí)行: for, while, until
一、for語(yǔ)句
格式:
for 變量 in 列表;do
語(yǔ)句1;
語(yǔ)句2;
...
done
例1、寫(xiě)一個(gè)腳本,添加10個(gè)用戶,并讓每個(gè)用戶的密碼同用戶名】
代碼如下:
#!/bin/bash
for I in {1..10}; do
useradd user$I;
echo user$I | passwd --stdin user$I
done
例2、寫(xiě)一個(gè)腳本,分別顯示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三個(gè)文件的時(shí)間戳,并將這三個(gè)文件被修改的時(shí)間改為201003030303.03
代碼如下:
#!/bin/bash
for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do
stat $Dir
touch -m -t 201003030303.03 $Dir
stat $Dir
done
bash的變量類(lèi)型:
本地變量
局部變量
環(huán)境變量
位置變量 :$1、$2、$3、$4....
特殊變量:
$?: 用于保存剛剛執(zhí)行的命令的狀態(tài)返回值;
0:成功執(zhí)行;1-255:失敗,1,2,127
可以使用exit命令在腳本中自定義腳本執(zhí)行狀態(tài)返回值;如果不定義,腳本執(zhí)行狀態(tài)返
回值取決于腳本執(zhí)行結(jié)束前最后執(zhí)行的那個(gè)語(yǔ)句的狀態(tài);
$@, $*: 所有位置參數(shù);
$#: 位置參數(shù)的個(gè)數(shù);
$0: 腳本名稱
二、if語(yǔ)句
1、單分支if語(yǔ)句:
格式:
if 條件; then
語(yǔ)句1
語(yǔ)句2
...
fi
例3、寫(xiě)一個(gè)腳本,實(shí)現(xiàn)如下功能: 如果用戶存在,就說(shuō)明其存在;
代碼如下:
#!/bin/bash
UserName=user1
if grep "^$UserName\>" /etc/passwd &> /dev/null; then
echo "$UserName exists."
fi
例4、寫(xiě)一個(gè)腳本,實(shí)現(xiàn)如下功能:如果設(shè)備/dev/sda3已經(jīng)掛載,就顯示其掛載點(diǎn);
代碼如下:
#!/bin/bash
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
mount | grep "/dev/sda3" | cut -d' ' -f3
fi
例5、寫(xiě)一個(gè)腳本,實(shí)現(xiàn)如下功能: 如果/etc/rc.d/rc.sysinit中有空白行,就顯示其空白行數(shù);
代碼如下:
#!/bin/bash
File='/etc/rc.d/rc.sysinit'
if grep "^$" $File &> /dev/null; then
grep "^$" $File | wc -l
fi
2、雙分支if語(yǔ)句:
格式:
if 條件; then
語(yǔ)句1
語(yǔ)句2
...
else
語(yǔ)句1
語(yǔ)句2
...
fi
例6、寫(xiě)一個(gè)腳本,實(shí)現(xiàn)如下功能:
如果設(shè)備/dev/sda3已經(jīng)掛載,就顯示其掛載點(diǎn);否則,就說(shuō)明其未掛載或設(shè)備不存在;
代碼如下:
#!/bin/bash
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
mount | grep "/dev/sda3" | cut -d' ' -f3
else
echo "$Device not mounted or not exist."
fi
3、多分支if語(yǔ)句:
格式:
if 條件1; then
語(yǔ)句1
語(yǔ)句2
...
elif 條件2; then
語(yǔ)句1
語(yǔ)句2
...
elif 條件3; then
語(yǔ)句1
語(yǔ)句2
...
else
語(yǔ)句1
語(yǔ)句2
...
fi
例7、寫(xiě)一個(gè)腳本:
判斷當(dāng)前主機(jī)的CPU生產(chǎn)商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生產(chǎn)商為GenuineIntel,就顯示其為Intel公司;
如果其生產(chǎn)商為AuthenticAMD,就顯示其為AMD公司;
否則,就顯示無(wú)法識(shí)別;
代碼如下:
#!/bin/bash
Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`
if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then
echo "intel"
elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then
echo "AMD"
else
echo "Unknown"
fi
下部:
一、bash條件測(cè)試:
整數(shù)測(cè)試 [ expression ]
字符測(cè)試 [[ expression ]]
條件測(cè)試 test expression test 根據(jù)表達(dá)式求值的結(jié)果返回 0(真)或 1(假)
1、整數(shù)測(cè)試:數(shù)值比較
-gt 大于
-ge 大于或等于
-eq 等于
-lt 小于
-le 小于或等于
-ne 不等于
例1:寫(xiě)一個(gè)腳本,生成兩個(gè)隨機(jī)數(shù),比較其大?。伙@示大數(shù);
bash有個(gè)內(nèi)置變量:$RANDOM
代碼如下:
#!/bin/bash
A=$RANDOM
B=$RANDOM
if [ $A -ge $B ]; then
echo "Max number is $A."
else
echo "Max number is $B."
fi
例2:寫(xiě)一腳本,隨機(jī)生成一個(gè)整數(shù),判定,顯示其奇偶性;
代碼如下:
#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0 ]; then
echo "$A: Even"
else
echo "$A: Odd"
fi
例3、寫(xiě)一個(gè)腳本:
計(jì)算100以內(nèi)所有奇數(shù)的和以及所有偶數(shù)的和;分別顯示之;
代碼如下:
#!/bin/bash
EvenSum=0
OddSum=0
for I in {1..100}; do
if [ $[$I%2] -eq 0 ]; then
EvenSum=$[$EvenSum+$I]
else
OddSum=$[$OddSum+$I]
fi
done
echo "EvenSum is: $EvenSum. OddSum is: $OddSum."
例4、計(jì)算N以內(nèi)所有奇數(shù)的和以及所有偶數(shù)的和;分別顯示之;N是通過(guò)參數(shù)傳遞過(guò)來(lái)的正整數(shù);
代碼如下:
#!/bin/bash
EvenSum=0
OddSum=0
for I in `seq 1 $1`;do
if [ $[$I%2] -eq 1 ]; then
OddSum=$[$OddSum+$I]
else
EvenSum=$[$EvenSum+$I]
fi
done
echo "EvenSum: $EvenSum."
echo "OddSUm: $OddSum."
echo "Sum: $[$EvenSum+$OddSum]"
例5、寫(xiě)一個(gè)腳本,完成以下要求:
1、添加10個(gè)用戶user1, user2, ..., user10;但要先判斷用戶是否存在,不存在而后再添加;
2、添加完成后,顯示一共添加了幾個(gè)用戶;當(dāng)然,不能包括因?yàn)槭孪却嬖诙鴽](méi)有添加的;
3、最后顯示當(dāng)前系統(tǒng)上共有多少個(gè)用戶;
代碼如下:
#!/bin/bash
Count=0
for I in {1..10}; do
if id user$I &> /dev/null; then
echo "user$I exists."
else
useradd user$I
echo "Add user$I successfully."
Count=$[$Count+1]
fi
done
echo "Add $Count new users."
echo "Total users: `wc -l /etc/passwd | cut -d' ' -f1`."
2、bash字符測(cè)試:
>: 大于
<: 小于
==: 等于
=~: 判斷左邊的字符串是否能夠被右邊的模式所匹配;通常用于[[]];
[[ $opt1 =~ $opt2 ]]一般做行首、行尾錨定;不要加引號(hào)
單目:
-z $STRING: 為空則為真,不空則為假;
-n $STRING: 為空則為假,不空則真;
例6、寫(xiě)一個(gè)腳本,判定用戶的shell是否為bash;
代碼如下:
#!/bin/bash
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ "$Shell" == "/bin/bash" ]; then
echo "Bash User."
Ret=0
else
echo "Not Bash User."
Ret=9
fi
exit $Ret
例7、根據(jù)用戶shell的結(jié)束符是否為sh來(lái)判定其是否為登錄用戶:
代碼如下:
#!/bin/bash
Shell=`grep "^$1:" /etc/passwd | cut -d: -f7`
if [ -z $Shell ]; then
echo "No shell."
exit 3
fi
if [[ "$Shell" =~ sh$ ]]; then
echo "Login User."
Ret=0
else
echo "None Login User."
Ret=4
fi
exit $Ret
二、bash測(cè)試之文件測(cè)試:
操作符 文件路徑
-f: 測(cè)試其是否為普通文件,即ls -l時(shí)文件類(lèi)型為-的文件;
-d: 測(cè)試其是否為目錄文件,即ls -l時(shí)文件類(lèi)型為d的文件;
-e: 測(cè)試文件是否存在;存在為真,否則為假;
-r: 測(cè)試文件對(duì)當(dāng)前用戶來(lái)說(shuō)是否可讀;
-w: 測(cè)試文件對(duì)當(dāng)前用戶來(lái)說(shuō)是否可寫(xiě);
-x: 測(cè)試文件對(duì)當(dāng)前用戶來(lái)說(shuō)是否可執(zhí)行;
-s: 測(cè)試文件大小是否不空,不空則真,空則假;
短路操作:只要前半段已經(jīng)可以決定最終結(jié)果,后半段就不再運(yùn)算;
與運(yùn)算:
真 && 真 = 真
真 && 假 = 假
假 && {真|假} = 假
或運(yùn)算:
假 || 0 = 0
假 || 1 = 1
真 || =1
例8、給定一個(gè)路徑,判斷如果為普通文件,顯示之;如果為目錄,顯示之;
否則,說(shuō)無(wú)法識(shí)別;
代碼如下:
#!/bin/bash
if [ ! -e $1 ]; then
echo "No such file."
exit 7
fi
if [ -f $1 ]; then
echo "Common file."
elif [ -d $1 ]; then
echo "Directory."
else
echo "Unknown file."
fi
綜合例子:
寫(xiě)一個(gè)腳本:可以接受一個(gè)參數(shù),其使用形式如下:
script.sh {start|stop|restart|status}
如果參數(shù)為start,創(chuàng)建空文件/var/lock/subsys/script,并顯示“Starting script successfully.”;
如果參數(shù)為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script finished.”;
如果參數(shù)為restart,則刪除文件/var/lock/subsys/script后重新創(chuàng)建,并顯示“Restarting script successfully.”;
如果參數(shù)為status,那么:
如果/var/lock/subsys/script文件存在,則顯示為“script is running.”
否則,則顯示為“script is stopped.”
其它任何參數(shù):則顯示“script.sh {start|stop|restart|status}”
代碼如下:
#!/bin/bash
if [ $1 == start ] ;then
touch /var/lock/subsys/script
echo "Starting script successfully."
elif [ $1 == stop ] ; then
rm -f /var/louk/subsys/script
echo "Stop script finished."
elif [ $1 == restart ];then
rm -f /var/louk/subsys/script
touch /var/lock/subsys/script
echo "Restarting script successfully."
elif [ $1 == status ];then
[ -e /var/lock/subsys/script ]&& echo "script is running." || echo "script is stopped."
else
echo "script.sh {start|stop|restart|status}"
fi
看完了這篇文章,相信你對(duì)“shell腳本中for語(yǔ)句、if語(yǔ)句怎么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!