3.Shell字符串對比

Shell字符串對比

1.字符串比對荣病,字符串必須使用雙引號

[ "name" = "name" ] 
[ "name" != "name" ] 
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0
  1. -z字符串為空副渴,輸出正確 -n字符串為非空蓝晒,輸出正確
    [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
  1. -z 案例:
    read -p "請輸入名字" name1 
    [ -z $name1 ] && echo "請輸入姓名否則不繼續(xù)執(zhí)行" && exit
    read -p "請輸入年齡" age1
    echo $name1 $age1

Shell正則比對

  1. [[ ]]
    [[]]
    [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

2.判斷傳參的參數(shù)是否為整數(shù)

    方法一:
    [root@web01 scripts]# age=188
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# age=188q
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
    1
    [root@web01 scripts]# age=18.8
    [root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
    [root@web01 scripts]# echo $?
    1
    方法二:
    expr $1 + 0 >/dev/null 2>&1
    [ $? -ne 0 ] && exit

多整數(shù)比對

  1. -a and
    -o or

    [ 10 -eq 10 -a 100 -ne 100 ]
    [root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
    [root@web01 scripts]# echo $?
    1
    [root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
    [root@web01 scripts]# echo $?
    0
    [root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
    [root@web01 scripts]# echo $?
    0
    
    [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
    [root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
    -bash: 條件表達式中有語法錯誤
    -bash: `-a' 附近有語法錯誤
    [root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
    [root@web01 scripts]# echo $?
    1
    [root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
    [root@web01 scripts]# echo $?
    0
    

    2.案例:傳入兩個數(shù)字 比對兩個數(shù)字的大小

例如:sh count.sh 10 10 要求判讀是否傳入兩個參數(shù) 要求數(shù)字加判讀是否為整數(shù)(禁止if)

? 10=10

    #!/bin/sh
    [ $# -ne 2 ] && echo "please input two number" && exit
    [[ ! $1 =~ ^[0-9]+$ ]] && echo "請輸入整數(shù)" && exit 50
    [[ ! $2 =~ ^[0-9]+$ ]] && echo "請輸入整數(shù)" && exit 100
    [ $1 -eq $2 ] && echo "$1=$2"
    [ $1 -gt $2 ] && echo "$1>$2"
    [ $1 -lt $2 ] && echo "$1<$2"

3.案例:批量創(chuàng)建用戶 批量創(chuàng)建10個用戶 oldboy1 oldboy2 oldboy3...oldboy10

要求密碼統(tǒng)一設置為123456

1.輸入用戶的前綴oldboy氢烘,判斷如果為空 則退出

2.輸入需要創(chuàng)建用戶的個數(shù) 10烦却,判斷是否為整數(shù)

        #!/bin/sh
        #read -p "please input prefix: " name
        #read -p "創(chuàng)建的個數(shù): " num
        for i in {1..10}
        do
            echo oldboy$i
        done

        [root@web01 scripts]# cat useradd.sh 
        #!/bin/sh
        read -p "please input prefix: " name
        read -p "創(chuàng)建的個數(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

4.案例:判斷當前10.0.0.0/24網(wǎng)絡中 有哪些IP地址在線 ping通則在線

        #!/bin/sh
        [ -f /etc/init.d/functions ] && . /etc/init.d/functions
        for i in `seq 254`
        do
            { IP=10.0.0.$i
            ping -c 1 -W 1 $IP >/dev/null 2>&1
            [ $? -eq 0 ] && action "ping $IP is" /bin/true
            } &
        done

網(wǎng)絡知識

        ip addr add 10.0.0.3/24 dev eth0  臨時生效 重啟失效
        面試題 配置一條默認網(wǎng)關
        route add default gw 10.0.0.254
        刪除網(wǎng)關
        route add default gw 10.0.0.254
        其他方法 靜態(tài)路由方式
        ip route add 0/0 via 10.0.0.254
        策略路由
        服務器使用vpn常用 網(wǎng)關被替換成vpn
        pptpstup 撥號命令
        查看網(wǎng)關
        route -n
        開機啟動配置文件(/etc/rc.local) +x 權限 rc.d/rc.local  (禁止使用alias和變量)

if判斷

1.單分支

    if [你有房];then       [ -f file ] && echo ok
    
    if [你有房]
    then
        我就嫁給你
    fi

    雙分支
    if [ 你有房 ]          [ -f file ] && echo ok || echo error
    then
        我就嫁給你
    else
        拜拜
    fi

2.多分支

    if [ 你有房 ]
    then
        我就嫁給你
    elif [ 你有錢 ]
    then
        我也嫁給你
    elif [ 你爸是李剛 ]
    then
        我也嫁給你
    elif [ 活好!運維技術好 ]
    then
        我倒貼也嫁給你
    elif [ 你在老男孩學運維 ]
    then
        我考慮考慮
    else
        拜拜
    fi

3.案例:輸入兩個數(shù)字 是否為整數(shù) 使用if方式

    #!/bin/bash
    read -p "請輸入第一個數(shù)字:" num1
    read -p "請輸入第二個數(shù)字:" num2
    if [ -z $num1 ]
    then
       echo "您輸入的第一個數(shù)字為空"&& exit
    elif [ -z $num2 ]
    then
       echo "您輸入的第二個數(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 "您輸入了錯誤的值执桌!"&& exit
    fi 

4.案例:根據(jù)操作系統(tǒng)不同的版本安裝不同的源

1.如何取出版本號

2.如何做版本號的比對

3.比對完成執(zhí)行相對應的安裝源

#!/bin/sh
ve=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
#centos6.x使用以上命令獲取不到版本號
if [ ${ve%%.*} -eq 7 ]
then
    #判斷網(wǎng)絡是否通暢ping 如果不通 則重啟systemctl restart network 通繼續(xù)執(zhí)行
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    #測試wget是否已安裝 無安裝先安裝wget
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
elif [ ${ve%%.*} -eq 6 ]
then
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
fi

5.案例:猜數(shù)字

生成一個隨機數(shù) 1-100之間

RANDOM 隨機數(shù)的范圍 0-32767

取余

echo $((RANDOM%100+1))

用戶輸入一個數(shù)字

判斷用戶輸入的數(shù)字如果相等則退出提示猜對了 大了 提示比隨機數(shù)大 小了 提示 比隨機數(shù)小

    #!/bin/sh
    ran=`echo $((RANDOM%100+1))`
    while true
    do
        let i++
    read -p "請輸入一個數(shù)字[1-100]: " num
    if [ $num -gt $ran ];then
        echo "你輸入的數(shù)字大了"
    elif [ $num -lt $ran ];then
        echo "你輸入的數(shù)字小了"
    else
        echo "恭喜你猜對了 總共猜了 $i 次"
        exit
    fi
    done
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鄙皇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仰挣,更是在濱河造成了極大的恐慌伴逸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膘壶,死亡現(xiàn)場離奇詭異错蝴,居然都是意外死亡,警方通過查閱死者的電腦和手機颓芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門顷锰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亡问,你說我怎么就攤上這事官紫。” “怎么了玛界?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵万矾,是天一觀的道長。 經(jīng)常有香客問我慎框,道長良狈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任笨枯,我火速辦了婚禮薪丁,結果婚禮上,老公的妹妹穿的比我還像新娘馅精。我一直安慰自己严嗜,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布洲敢。 她就那樣靜靜地躺著漫玄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦优,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天渗常,我揣著相機與錄音,去河邊找鬼汗盘。 笑死皱碘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的隐孽。 我是一名探鬼主播癌椿,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菱阵!你這毒婦竟也來了踢俄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤送粱,失蹤者是張志新(化名)和其女友劉穎褪贵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抗俄,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡脆丁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了动雹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片槽卫。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胰蝠,靈堂內(nèi)的尸體忽然破棺而出歼培,到底是詐尸還是另有隱情,我是刑警寧澤茸塞,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布躲庄,位于F島的核電站,受9級特大地震影響钾虐,放射性物質(zhì)發(fā)生泄漏噪窘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一效扫、第九天 我趴在偏房一處隱蔽的房頂上張望倔监。 院中可真熱鬧,春花似錦菌仁、人聲如沸浩习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱秽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疟赊,已是汗流浹背辱士。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留听绳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓异赫,卻偏偏與公主長得像椅挣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子塔拳,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349