shell編程(二)

一岳掐、字符串比對(duì)

字符串必須使用雙引號(hào)
-n //nozero 字符串長度不為0時(shí)為真
-z //zero 字符串長度為0時(shí)為真

[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0

二凭疮、正則比對(duì)

正則比對(duì)必須用[[]]
~是匹配的意思

[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1

三、多整數(shù)比對(duì)

-a and 并且 正則比對(duì)里用&&
-o or 或者 正則比對(duì)里用||
案例一:批量創(chuàng)建用戶 批量創(chuàng)建10個(gè)用戶 oldboy1 oldboy2 oldboy3...oldboy10
要求密碼統(tǒng)一設(shè)置為123456
1.輸入用戶的前綴 oldboy
判斷如果為空 則退出
2.輸入需要?jiǎng)?chuàng)建用戶的個(gè)數(shù) 10
判斷是否為整數(shù)

#!/bin/sh
read -p "please input prefix: " name
read -p "創(chuàng)建的個(gè)數(shù): " num
for i in `seq $num`
do
  useradd $name$i >/dev/null 2>&1
  echo 123456|passwd --stdin $name$i &>/dev/null
  [ $? -eq 0 ] && echo "$name$i create is ok"
done

四串述、if判斷

案例:輸入兩個(gè)數(shù)字执解,是否為整數(shù),并判斷大小

#!/bin/bash
read -p "請(qǐng)輸入第一個(gè)數(shù)字:" num1
read -p "請(qǐng)輸入第二個(gè)數(shù)字:" num2
if [ -z $num1 ]
then
echo "您輸入的第一個(gè)數(shù)字為空"&& exit
elif [ -z $num2 ]
then
echo "您輸入的第二個(gè)數(shù)字為空"&& exit
elif [[  "$num1" =~ ^[0-9]+$ && "$num2" =~ ^[0-9]+$ ]]
then
if [ $num1 -lt $num2 ]
then
echo "$num1<$num2"
elif [ $num1 -gt $num2 ]
then
echo "$num1>$num2"
else
echo "$num1=$num2"
fi
else
echo "您輸入了錯(cuò)誤的值纲酗!"&& exit
fi    

五衰腌、case流程語句

案例:批量刪除用戶

#!/bin/sh
read -p "請(qǐng)輸入用戶名前綴: " prefix
read -p "請(qǐng)輸入要?jiǎng)h除幾個(gè)用戶: " num
for i in `seq $num`
do
echo $prefix$i
done
read -p "你確定要?jiǎng)h除以上用戶嗎?[y|yes|YES|n|N|no]" ready
for n in `seq $num`
do
name=$prefix$n
case $ready in
    y|yes|YES)
        id $name &>/dev/null
        if [ $? -eq 0 ];then
        userdel -r $name
         [ $? -eq 0 ] && echo "$name del is ok"
        else
        echo "id: $name: no such user"
        fi
        ;;
    n|N|no)
            echo "不刪除我玩啥呢?" && exit
        ;;
         *)
        echo "USAGE $0 [y|yes|YES|n|N|no]"
esac
done

六、for循環(huán)

案例:使用for循環(huán)從1加到100

#!/bin/bash
#Author
for i in {1..100}
do
        sum=$[sum+i]
done
echo $sum
命令行
for i in `seq 100`;do sum=$[sum+i];done;echo $sum

七觅赊、while循環(huán)

案例:使用while循環(huán)從1加到100

#!/bin/bash
#Author
i=0
while [ $i -le 100 ]
do
        sum=$[sum+i]
        let i++
done
echo $sum

案例:統(tǒng)計(jì)行號(hào)
while read line line 變量名 按行讀取文件的內(nèi)容

#!/bin/bash
#Author
while read line
do
        let i++
done</etc/passwd
echo $i

八右蕊、流程控制語句 exit break continue

exit 退出整個(gè)腳本 不會(huì)繼續(xù)執(zhí)行
break 跳出本次循環(huán) 繼續(xù)往下執(zhí)行 跳出循環(huán)體
continue 結(jié)束當(dāng)前此次的命令,繼續(xù)下一次循環(huán)

#!/bin/sh
while true
do
    echo ok
    exit
    echo hehe
done
echo done......
#!/bin/sh
while true
do
    echo ok
    break 
    echo hehe
done
echo done......
#!/bin/sh
while true
do
    echo ok
    continue
    echo hehe
done
echo done......

九、函數(shù)

命令的集合 完成特定功能的代碼塊
模塊化 復(fù)用
函數(shù)和變量類似 只有先定義才可以調(diào)用,如果只定義不調(diào)用 則不會(huì)執(zhí)行

函數(shù)的定義和調(diào)用
三種方法

[root@web scripts]# cat fun.sh 
#!/bin/sh
test1(){
    echo "第一種函數(shù)定義方式"
}
function test2(){
    echo "第二種函數(shù)定義方式"
}
function test3 {
    echo "第三種函數(shù)定義方式"
}
test1
test2
test3

函數(shù)的傳參 不能直接傳參
1.在函數(shù)名后面跟參數(shù)
2.全局配置 在函數(shù)最上面設(shè)置變量
3.local 只在函數(shù)體內(nèi)部生效

[root@web scripts]# cat fun.sh 
#!/bin/sh
fun(){
    if [ -f $1 ];then
     echo "$1 exists"
    else
    echo "$1 no exists"
    fi
}
fun $2 $3

#!/bin/sh
fun(){
num=20
for i in `seq 10`
do
    sum=$[num+i]
done
echo $sum
}
fun
    
#!/bin/sh
fun(){
num=20
for i in `seq $1`
do
    sum=$[num+i]
done
echo $sum
}
fun $3 $1 $2

函數(shù)返回值 return

[root@web scripts]# cat fun3.sh 
#!/bin/sh
fun(){
    if [ -f $1 ];then
    return 50
    else
    return 100
    fi  
}
fun $1
if [ $? -eq 50 ];then
    echo "ok"
else
    echo "error"
fi
函數(shù)內(nèi)如果執(zhí)行的上一條是函數(shù)名  則不會(huì)返回函數(shù)本身執(zhí)行的返回值
[root@web scripts]# cat fun4.sh
    #!/bin/sh
    fun(){
       echo 50
       return 1
    }
    re=`fun`
    echo "函數(shù)的返回值是?: $?"
    echo "函數(shù)執(zhí)行的結(jié)果是?: $re"
    [root@web scripts]# sh fun4.sh
    函數(shù)的返回值是?: 1
    函數(shù)執(zhí)行的結(jié)果是?: 50

[root@web scripts]# cat fun4.sh
    #!/bin/sh
    fun(){
       echo 50
       return 1
    }
    re=`fun`
    name=oldboy
    echo "函數(shù)的返回值是?: $?"
    echo "函數(shù)執(zhí)行的結(jié)果是?: $re"
    [root@web scripts]# sh fun4.sh
    函數(shù)的返回值是?: 0
    函數(shù)執(zhí)行的結(jié)果是?: 50

坑:for循環(huán)可以區(qū)分空格
while循環(huán)按行讀取
在shell中調(diào)用系統(tǒng)的/etc/init.d/functions茉兰,先執(zhí)行這個(gè)文件尤泽,
在用action引用欣簇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末规脸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熊咽,更是在濱河造成了極大的恐慌莫鸭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件横殴,死亡現(xiàn)場離奇詭異被因,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衫仑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門梨与,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人文狱,你說我怎么就攤上這事粥鞋。” “怎么了瞄崇?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵呻粹,是天一觀的道長。 經(jīng)常有香客問我苏研,道長等浊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任摹蘑,我火速辦了婚禮筹燕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己撒踪,他們只是感情好踪少,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糠涛,像睡著了一般援奢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忍捡,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天集漾,我揣著相機(jī)與錄音,去河邊找鬼砸脊。 笑死具篇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凌埂。 我是一名探鬼主播驱显,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞳抓!你這毒婦竟也來了埃疫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤孩哑,失蹤者是張志新(化名)和其女友劉穎栓霜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體横蜒,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胳蛮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丛晌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅炊。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澎蛛,靈堂內(nèi)的尸體忽然破棺而出抚垄,到底是詐尸還是另有隱情,我是刑警寧澤瓶竭,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布督勺,位于F島的核電站,受9級(jí)特大地震影響斤贰,放射性物質(zhì)發(fā)生泄漏智哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一荧恍、第九天 我趴在偏房一處隱蔽的房頂上張望瓷叫。 院中可真熱鬧屯吊,春花似錦、人聲如沸摹菠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽次氨。三九已至蔽介,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煮寡,已是汗流浹背虹蓄。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幸撕,地道東北人薇组。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓坐儿,卻偏偏與公主長得像律胀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子貌矿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 變量 局部變量 環(huán)境變量-----export 一個(gè)用戶的所有進(jìn)程中都可以訪問的變量 環(huán)境變量的命令一...
    雅稱容閱讀 230評(píng)論 0 0
  • 樣例 注意:shell代碼中l(wèi)inux命令中有交互命令的炭菌,以<<EOF開頭,以EOF結(jié)尾站叼。中間寫交互命令娃兽,命令要頂...
    zhangxiaohao閱讀 129評(píng)論 0 1
  • 目錄 一、shell中的函數(shù)二尽楔、shell中的數(shù)組三、shell告警系統(tǒng) 一第练、shell中的函數(shù) 函數(shù)就是把一段代...
    XiaoMing丶閱讀 294評(píng)論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,234評(píng)論 0 4
  • 昨夜夢依稀阔馋,隔遠(yuǎn)去看你,話語藏心里娇掏,夢里淚沾衣呕寝。天明書欲寄,深深苦于思婴梧,暗處呼天地下梢,大腳漢娶你塞蹭。坐在那一起孽江,卻無交...
    廢柴長短句閱讀 155評(píng)論 1 6