shell 脚本编程之for语句、if语句(2 )
一、bash條件測試:
? ? ?整數測試 ? [ expression ]
? ? ?字符測試 ? ? ` expression `
? ? ?條件測試 ? ? test expression ? test 根據表達式求值的結果返回 0(真)或 1(假)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1、整數測試:數值比較
? ? ? ? ?-gt ? 大于
? ? ? ? ?-ge ? 大于或等于
? ? ? ? ?-eq ? 等于
? ? ? ? ?-lt ? 小于
? ? ? ? ?-le ? 小于或等于
? ? ? ? ?-ne ? ?不等于
例1:寫一個腳本,生成兩個隨機數,比較其大小;顯示大數;
bash有個內置變量:$RANDOM
#!/bin/bashA=$RANDOMB=$RANDOM if [ $A -ge $B ]; thenecho "Max number is $A." elseecho "Max number is $B." fi例2:寫一腳本,隨機生成一個整數,判定,顯示其奇偶性;
#!/bin/bash # A=$RANDOM if [ $[$A%2] -eq 0 ]; thenecho "$A: Even" elseecho "$A: Odd" fi
例3、寫一個腳本:
計算100以內所有奇數的和以及所有偶數的和;分別顯示之;
#!/bin/bash EvenSum=0 OddSum=0 for I in {1..100}; doif [ $[$I%2] -eq 0 ]; thenEvenSum=$[$EvenSum+$I]elseOddSum=$[$OddSum+$I]fi done echo "EvenSum is: $EvenSum. OddSum is: $OddSum."例4、計算N以內所有奇數的和以及所有偶數的和;分別顯示之;N是通過參數傳遞過來的正整數;
#!/bin/bash EvenSum=0 OddSum=0 for I in `seq 1 $1`;doif [ $[$I%2] -eq 1 ]; thenOddSum=$[$OddSum+$I]elseEvenSum=$[$EvenSum+$I]fi done echo "EvenSum: $EvenSum." echo "OddSUm: $OddSum." echo "Sum: $[$EvenSum+$OddSum]"
例5、寫一個腳本,完成以下要求:
? ? ?1、添加10個用戶user1, user2, ..., user10;但要先判斷用戶是否存在,不存在而后再添加;
? ? ?2、添加完成后,顯示一共添加了幾個用戶;當然,不能包括因為事先存在而沒有添加的;
? ? ?3、最后顯示當前系統上共有多少個用戶;
#!/bin/bash Count=0 for I in {1..10}; doif id user$I &> /dev/null; thenecho "user$I exists."elseuseradd user$Iecho "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字符測試:
? ? ? ?>: 大于
? ? ? ?<: 小于
? ? ? ==: 等于
? ? ? =~: 判斷左邊的字符串是否能夠被右邊的模式所匹配;通常用于[[]];
? ? ? ? ?[[ $opt1 =~ $opt2 ]]一般做行首、行尾錨定;不要加引號
?單目:
? ? ?-z $STRING: 為空則為真,不空則為假;
? ? ?-n $STRING: 為空則為假,不空則真;
例6、寫一個腳本,判定用戶的shell是否為bash;
#!/bin/bash Shell=`grep "^$1:" /etc/passwd | cut -d: -f7` if [ "$Shell" == "/bin/bash" ]; thenecho "Bash User."Ret=0 elseecho "Not Bash User."Ret=9 fi exit $Ret
例7、根據用戶shell的結束符是否為sh來判定其是否為登錄用戶:
#!/bin/bash Shell=`grep "^$1:" /etc/passwd | cut -d: -f7` if [ -z $Shell ]; thenecho "No shell."exit 3 fi if [[ "$Shell" =~ sh$ ]]; thenecho "Login User."Ret=0 elseecho "None Login User."Ret=4 fi exit $Ret
二、bash測試之文件測試:
? ? 操作符 文件路徑
? ? ? ?-f: 測試其是否為普通文件,即ls -l時文件類型為-的文件;
? ? ? ?-d: 測試其是否為目錄文件,即ls -l時文件類型為d的文件;
? ? ? ?-e: 測試文件是否存在;存在為真,否則為假;
? ? ? ?-r: 測試文件對當前用戶來說是否可讀;
? ? ? ?-w: 測試文件對當前用戶來說是否可寫;
? ? ? ?-x: 測試文件對當前用戶來說是否可執行;
? ? ? ?-s: 測試文件大小是否不空,不空則真,空則假;
短路操作:只要前半段已經可以決定最終結果,后半段就不再運算;
?與運算:
? ?真 && 真 = ?真
? ?真 && 假 = ?假
? ?假 && {真|假} = 假
?或運算:
? ?假 || 0 = 0
? ?假 || 1 = 1
? ?真 || ? =1
? ?例8、給定一個路徑,判斷如果為普通文件,顯示之;如果為目錄,顯示之;
? ? ? 否則,說無法識別;
#!/bin/bash if [ ! -e $1 ]; thenecho "No such file."exit 7 fi if [ -f $1 ]; thenecho "Common file." elif [ -d $1 ]; thenecho "Directory." elseecho "Unknown file." fi
綜合例子:
寫一個腳本:可以接受一個參數,其使用形式如下:
script.sh {start|stop|restart|status}
如果參數為start,創建空文件/var/lock/subsys/script,并顯示“Starting script successfully.”;
如果參數為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script finished.”;
如果參數為restart,則刪除文件/var/lock/subsys/script后重新創建,并顯示“Restarting script successfully.”;
如果參數為status,那么:
如果/var/lock/subsys/script文件存在,則顯示為“script is running.”
否則,則顯示為“script is stopped.”
其它任何參數:則顯示“script.sh {start|stop|restart|status}”
#!/bin/bash if [ $1 == start ] ;thentouch /var/lock/subsys/scriptecho "Starting script successfully."elif [ $1 == stop ] ; thenrm -f /var/louk/subsys/scriptecho "Stop script finished."elif [ $1 == restart ];thenrm -f /var/louk/subsys/scripttouch /var/lock/subsys/scriptecho "Restarting script successfully."elif [ $1 == status ];then[ -e /var/lock/subsys/script ]&& echo "script is running." || echo "script is stopped."elseecho "script.sh {start|stop|restart|status}" fi轉載于:https://blog.51cto.com/limian/1253914
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的shell 脚本编程之for语句、if语句(2 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse搭建SSH框架详解
- 下一篇: putty以及psftp的基本操作,使用