shell條件判斷的兩個特殊設備linux
/dev/nullshell
linux系統的空設備,也稱爲位桶,任何寫入其中的數據均會被丟棄當你不想將標準化輸出顯示或者保存至文件時能夠將文件從定向到/dev/null
express
禁止標準化輸出 cat $filename > /dev/null
bash
禁止標準化錯誤 rm $filename > /dev/nullide
/dev/zero函數
Linux的輸入設備,能夠用他初始化文件,能夠無限制輸出0, 另外一個做用是用0去填充一個指定大小的文件測試
在條件判斷語句中&&表示and ||表示or spa
腳本位置參數:
blog
在linux中參數位置從命令後起依次日後,分別是0,1,2,3。。進程
其中特殊變量有:
$?: 命令的狀態結果;
$#: 傳遞給腳本或函數的參數的個數;
$*和$@: 引用傳遞給腳本或函數的參數列表;
$$:腳本執行時所產生的進程
shift [n]:表明輪替
與用戶交互:
read 用於讀取來自鍵盤的變數
格式: read [-pt] value
-p:後面直接跟提示字符
-t:後面直接接等待的時間『秒數』
[root@iZ28qzns9m4Z bashtest]# echo $a test whoaaaaa test [root@iZ28qzns9m4Z bashtest]# read -p "input:" -t 5 a input:aaaaa [root@iZ28qzns9m4Z bashtest]# echo $a aaaaa [root@iZ28qzns9m4Z bashtest]#
命令引用
格式一: `命令`
格式二:$(命令)
條件判斷語句 if,then,case
只有一個判斷式的語句格式:
if[條件];then
命令 ==> 當條件爲真時執行,若不僅一條時用換行符隔開
fi
須要進行判斷時:
if [條件];then
條件成立時,須要輸入的內容
elif [條件二];then
條件成立時,須要輸入的內容
else
條件與條件1、二均不成立時須要輸入的內容
fi
case的判斷結構也能夠用於多分支:
語法格式:
case $變量名稱 in
"第一變量內容")command命令;;
"第二變量內容")command命令;;
"第三變量內容")command命令;;
"第四變量內容")command命令;;
...
*)command命令;;===》在以上條件均不匹配的條件下執行
esac:
循環語句:for while until
在linux 循環語句中 list 是一個重 點,他負責循環時所須要的列表元素,是由一個或多個空格或換行符分隔開的字符串組成,把列表的每一個字符串逐個賦值給VARIABLE表示的變量;
生成格式:
數字:① list="1 2 3 4 5 6 10" ==》 for var in ${list}
② for var in {1..10}
[root@iZ28qzns9m4Z bashtest]# cat 1for.sh #!/bin/bash # #list="1 2 3 4 5 6 10" #第一種 #for i in ${list} #do # echo $i #done =================================== for i in {1..10} #第二種 do echo $i done [root@iZ28qzns9m4Z bashtest]#
(2) 直接給出列表
(3) glob
#!/bin/bash # for filename in /相對具體的路徑/*; do file $filename done 注:若是不是相對具體的路徑,那麼腳本會報錯,filename只搜索相對一級路徑下的內容不對第二級子目錄進行分析
(4) 命令生成
算術運算:
+, -, *, /, %, **
(1) $[$A+$B]
(2) $(($A+$B))
(3) let VARIABLE=$A+$B
(4) VARIABLE=$(expr $A + $B)
加強型賦值:
+=
sum=$[$sum+$i]
let sum+=$i
-=, *=, /=, %=
let count=$[$count+1] --> let count+=1 --> let count++
let count=$[$count-1] --> let count-=1 --> let count--
[root@iZ28qzns9m4Z bashtest]# sh 4for-2.sh 2500 [root@iZ28qzns9m4Z bashtest]# cat 4for-2.sh #!/bin/bash sum=0 for i in $(seq 1 2 100) do let "sum+=i" done echo $sum [root@iZ28qzns9m4Z bashtest]#
for 運行前測試語句,用於建立重複循環
格式: for var in ${list}
do
循環命令
done
不帶列表的for循環
格式: for var
do
循環命令
done
while循環:
while CONDTION;
do
循環體
done
進入條件:當CONDITION爲「真」;
退出條件:當CONDITION爲「假」;
while CONDITION;
do
循環體
控制變量的修正表達式
done
while :
do
command
done
until 循環:
until命令和while命令相似,while能實現的腳本until一樣也能夠實現,但區別是until循環的退出狀態是不爲0,退出狀態是爲0(與while恰好相反),即whie循環在條件爲真時繼續執行循環而until則在條件爲假時執行循環。
語法格式:
until expression
do
command
done
[root@iZ28qzns9m4Z bashtest]# cat 1until.sh #!/bin/bash declare -i sum=0 declare -i i=1 until [[ "$i" -gt 10 ]] do let sum+=i let i++ done echo $sum [root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh + declare -i sum=0 + declare -i i=1 + [[ 1 -gt 10 ]] + let sum+=i + let i++ + [[ 2 -gt 10 ]] + let sum+=i + let i++ + [[ 3 -gt 10 ]] + let sum+=i + let i++ + [[ 4 -gt 10 ]] + let sum+=i + let i++ + [[ 5 -gt 10 ]] + let sum+=i + let i++ + [[ 6 -gt 10 ]] + let sum+=i + let i++ + [[ 7 -gt 10 ]] + let sum+=i + let i++ + [[ 8 -gt 10 ]] + let sum+=i + let i++ + [[ 9 -gt 10 ]] + let sum+=i + let i++ + [[ 10 -gt 10 ]] + let sum+=i + let i++ + [[ 11 -gt 10 ]] + echo 55 55 [root@iZ28qzns9m4Z bashtest]#
循環控制:
continue [n]:提早結束本輪循環,而直接進入下一輪;
break [n]:提早結束循環;
while循環:
while CONDITION; do
.......
if CONDITION2; then
break [n]
fi
done
[root@iZ28qzns9m4Z bashtest]# cat 1until.sh #!/bin/bash declare -i sum=0 declare -i i=1 until [[ "$i" -gt 10 ]] do let sum+=i let i++ if [ $i -eq 5 ]; then break fi echo $sum done [root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh + declare -i sum=0 + declare -i i=1 + [[ 1 -gt 10 ]] + let sum+=i + let i++ + '[' 2 -eq 5 ']' + echo 1 1 + [[ 2 -gt 10 ]] + let sum+=i + let i++ + '[' 3 -eq 5 ']' + echo 3 3 + [[ 3 -gt 10 ]] + let sum+=i + let i++ + '[' 4 -eq 5 ']' + echo 6 6 + [[ 4 -gt 10 ]] + let sum+=i + let i++ + '[' 5 -eq 5 ']' + break [root@iZ28qzns9m4Z bashtest]#
while CONDITION; do
......
if CONDITION2; then
continue [n]
fi
......
done
死循環:
while true; do
循環體
if CONDTION; then
break
fi
done
until false; do
循環體
if CONDITION; then
break
fi
done
while循環的特殊用法:
遍歷文件的每一行:
while read VARIABLE; do
循環體
done < /PATH/FROM/SOME_FILE
for循環的特殊用法:
for ((expr1;expr2;expr3)); do
循環體
done
expr1: 定義控制變量,並初始賦值;
expr2: 循環控制條件;
進入條件:控制條件爲「真」
退出條件:控制條件爲「假」
expr3: 修正控制變量