shell腳本的流程控制語句的實現(xiàn)
一、if 判斷
1)基本語法
(1)單分支
if [ 條件判斷式 ];then 程序 fi
或者
if [ 條件判斷式 ] then 程序 fi
大于18,命令行輸出OK
[root@hadoop ~]# a=25 [root@hadoop ~]# if [ $a -gt 18 ];then echo OK; fi OK [root@hadoop ~]# a=15 [root@hadoop ~]# if [ $a -gt 18 ]; then echo OK; fi
或者
[root@hadoop scripts]# a=25 [root@hadoop scripts]# if [ $a -gt 18 ] && [ $a -lt 35 ];then echo OK;fi OK
判斷是否張三,是輸出張三
[root@hadoop scripts]# vim if_test.sh
#!/bin/bash
if [ "$1"x = "zhangsan"x ] #等號左右加x,避免輸入空值報錯
then
echo "zhangsan"
fi
[root@hadoop scripts]# . if_test.sh zhangsan
zhangsan
[root@hadoop scripts]# . if_test.sh
[root@hadoop scripts]# . if_test.sh lisi
邏輯與-a,邏輯或-o
[root@hadoop scripts]# a=36 [root@hadoop scripts]# if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK; fi [root@hadoop scripts]# if [ $a -gt 18 && $a -lt 35 ]; then echo OK; fi -bash: [: missing `]' #不能直接用 [root@hadoop scripts]# if [ $a -gt 18 -a $a -lt 35 ]; then echo OK; fi [root@hadoop scripts]# a=20 [root@hadoop scripts]# if [ $a -gt 18 -a $a -lt 35 ]; then echo OK; fi OK
(2)多分支
if [ 條件判斷式 ] then 程序 elif [ 條件判斷式 ] then 程序 else 程序 fi
判斷屬于哪個年齡段,雙分支
[root@hadoop scripts]# vim if_test.sh
#!/bin/bash
if [ "$1"x = "zhangsan"x ]
then
echo "zhangsan"
fi
#輸入第二個參數(shù),表示年齡,判斷屬于哪個年齡段
if [ $2 -lt 18 ]
then
echo "未成年人"
else
echo "成年人"
fi
[root@hadoop scripts]# . if_test.sh zhangsan 15
zhangsan
未成年人
[root@hadoop scripts]# . if_test.sh zhangsan 25
zhangsan
成年人判斷屬于哪個年齡段,多分支
注意事項:
①[ 條件判斷式 ],中括號和條件判斷式之間必須有空格
②if 后要有空格
二、case 語句
1)基本語法
case $變量名 in
"值 1")
如果變量的值等于值 1,則執(zhí)行程序 1
;;
"值 2")
如果變量的值等于值 2,則執(zhí)行程序 2
;;
…省略其他分支…
*) 如果變量的值都不是以上的值,則執(zhí)行此程序
;;
esac
輸入數(shù)字,輸出對應(yīng)語句
[root@hadoop ~]# vim case_test.sh #!/bin/bash case $1 in 1) ?? ?echo "one" ;; 2) ?? ?echo "two" ;; 3) ?? ?echo "three" ;; *) ?? ?echo "number else" ;; esac [root@hadoop ~]# chmod +x case_test.sh [root@hadoop ~]# . case_test.sh number else [root@hadoop ~]# . case_test.sh 2 two [root@hadoop ~]# . case_test.sh 1 one [root@hadoop ~]# . case_test.sh 6 number else
注意事項:
(1)case 行尾必須為單詞“in”,每一個模式匹配必須以右括號“)”結(jié)束。
(2)雙分號“;;”表示命令序列結(jié)束,相當(dāng)于 java 中的 break。
(3)最后的“*)”表示默認模式,相當(dāng)于 java 中的 default。
三、for 循環(huán)
1)基本語法1
for (( 初始值;循環(huán)控制條件;變量變化 ))
do
程序
done
2)案例實操
從 1 加到 100,注意在for循環(huán)里面可以直接用數(shù)學(xué)運算符
[root@hadoop ~]# vim sum_to.sh
[root@hadoop ~]# cat sum_to.sh
#!/bin/bash
sum=0
for (( i=1; i <= $1; i++ ))
do
sum=$[ $sum + $i ]
done
echo $sum
[root@hadoop ~]# chmod +x sum_to.sh
[root@hadoop ~]# . sum_to.sh 100
5050
3)基本語法 2
for 變量 in 值 1 值 2 值 3…
do
程序
done
[root@hadoop ~]# for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
5050
(4)比較$*和$@區(qū)別
$*和$@都表示傳遞給函數(shù)或腳本的所有參數(shù),不被雙引號“”包含時,都以$1 $2 …$n 的形式輸出所有參數(shù)。
沒加雙引號,兩種輸出結(jié)果沒有區(qū)別
[root@hadoop scripts]# vim parameter_for_test.sh
#!/bin/bash
echo '============$*================'
for para in $*
do
echo $para
done
echo '============$@================'
for para in $@
do
echo $para
done
[root@hadoop scripts]# chmod +x parameter_for_test.sh
[root@hadoop scripts]# . parameter_for_test.sh a b c d e
============$*================
a
b
c
d
e
============$@================
a
b
c
d
e加雙引號,兩種輸出結(jié)區(qū)別,一種有換行,一種沒有換行。
當(dāng)它們被雙引號“”包含時,$*會將所有的參數(shù)作為一個整體,以“$1 $2 …$n”的形式輸 出所有參數(shù);$@會將各個參數(shù)分開,以“$1” “$2”…“$n”的形式輸出所有參數(shù)。
[root@hadoop scripts]# vim parameter_for_test.sh
#!/bin/bash
echo '============$*================'
for para in "$*"
do
echo $para
done
echo '============$@================'
for para in "$@"
do
echo $para
done
[root@hadoop scripts]# . parameter_for_test.sh a b c d e
============$*================
a b c d e
============$@================
a
b
c
d
e四、while循環(huán)
1)基本語法
while [ 條件判斷式 ]
do
程序
done
2)案例實操
從1加到100
[root@hadoop scripts]# vim sum_to.sh
#!/bin/bash
#用for進行實現(xiàn)
sum=0
for (( i=1; i <= $1; i++ ))
do
sum=$[ $sum + $i ]
done
echo $sum
#用while做一個實現(xiàn)
a=1
while [ $a -le $1 ]
do
sum2=$[ $sum2 + $a ]
a=$[ $a + 1 ]
done
echo $sum2
[root@hadoop scripts]# . sum_to.sh 100
5050
5050更簡單語法用shell內(nèi)嵌命令let
[root@hadoop scripts]# vim sum_to.sh
#用while做一個實現(xiàn)
sum2=0
a=1
while [ $a -le $1 ]
do
# sum2=$[ $sum2 + $a ]
# a=$[ $a + 1 ]
let sum2+=a
let a++
done
echo $sum2
[root@hadoop scripts]# . sum_to.sh 100
5050
5050
到此這篇關(guān)于shell腳本的流程控制語句的實現(xiàn)的文章就介紹到這了,更多相關(guān)shell 流程控制語句 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文學(xué)會使用Linux內(nèi)核模塊&proc實例統(tǒng)計所有進程信息
這篇文章主要介紹了使用Linux內(nèi)核模塊&proc實例統(tǒng)計所有進程信息詳解,2023-05-05
普通用戶啟動supervisor報HTTP錯誤(strace)解決分析
這篇文章主要為大家介紹了普通用戶啟動supervisor報HTTP錯誤strace的問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Shell實現(xiàn)程序造死循環(huán)的幾種方法示例
在linux下編程的程序猿都知道shell腳本,就算你不怎么熟悉,也應(yīng)該聽過的吧!那在shell腳本中的死循環(huán)該怎么寫呢?下面這篇文章就來給大家介紹了關(guān)于Shell如何實現(xiàn)讓程序造死循環(huán)的幾種方法,需要的朋友可以參考下。2017-08-08

