4.9Day28Shell編程入門(mén)

1、為什么要學(xué)習(xí)Shell編程官脓?

Linux系統(tǒng)中會(huì)大量的使用Shell,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù)涝焙,例如:自動(dòng)備份卑笨、監(jiān)控、自動(dòng)安裝服務(wù)仑撞。

Shell編程是Linux運(yùn)維人員必須要會(huì)的編程語(yǔ)言赤兴。最簡(jiǎn)單的編程語(yǔ)言。編程也是運(yùn)維人員必須具備的本領(lǐng):Shell隧哮、Python是運(yùn)維人員必須具備的本領(lǐng)

2桶良、什么是Shell?

Shell就是一個(gè)命令解釋器(翻譯官)近迁,命令行的命令以及腳本都會(huì)通過(guò)shell解釋傳給操作系統(tǒng)艺普,處理后在輸出給用戶(hù)。

[root@oldboyedu ~]# tail -1 /etc/passwd
oldgirl1:x:8889:8889::/home/oldgirl1:/bin/bash #<==創(chuàng)建用戶(hù)時(shí),系統(tǒng)指定的翻譯官歧譬。

3岸浑、Shell的分類(lèi)
  1. Bourne shell
    Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)瑰步、Bourne Again Shell(bash)三種類(lèi)型矢洲。
  1. C shell
    C shell又包括csh、tcsh兩種類(lèi)型缩焦。
[root@oldboyedu ~]# cat /etc/shells     <<====查看C7支持的shell:
/bin/sh                                 <<====  /bin/sh 是bash的軟連接              
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/sh 是bash的軟連接
######4读虏、C7:默認(rèn)Shell
[root@oldboyedu ~]# echo $SHELL 
/bin/bash
5、什么是Shell腳本袁滥?

程序盖桥、命令放入文件里執(zhí)行,這個(gè)文件稱(chēng)之為Shell腳本文件题翻。
工作中最多的編程寫(xiě)腳本揩徊,存放在文件里。

6嵌赠、Shell變量:

a.全局變量(環(huán)境變量)
在整個(gè)系統(tǒng)中生效塑荒、一般是大寫(xiě)、系統(tǒng)中默認(rèn)就
存在一些這樣的變量姜挺,滿(mǎn)足系統(tǒng)和程序運(yùn)行的需求齿税。

系統(tǒng)自帶的環(huán)境變量;
[root@oldboyedu ~]# echo $PS1      <<====內(nèi)核信息
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$
[root@oldboyedu ~]# echo $PATH     <<====環(huán)境變量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu ~]# echo $HOME
/root
[root@oldboyedu ~]# echo $SHELL
/bin/bash
[root@oldboyedu ~]# echo $UID
0
自定義環(huán)境變量:

方法1
export OLDBOY="I am oldboy."

方法2:
OLDBOY="I am oldboy."
export OLDBOY

[root@oldboyedu ~]# export OLDBOY="I am oldboy." 設(shè)定為環(huán)境變量
[root@oldboyedu ~]# echo $OLDBOY  打印發(fā)現(xiàn)是
I am oldboy.

/etc/profile==>~/.bash_profile===>~/.bashrc===>/etc/bashrc 環(huán)境變量文件
推薦以后把環(huán)境變量放入/etc/bashrc
[root@oldboyedu ~]# tail -1 /etc/bashrc 
export OLDBOY="I am oldboy."
[root@oldboyedu ~]# . /etc/bashrc
[root@oldboyedu ~]# echo $OLDBOY #<==輸出一個(gè)變量?jī)?nèi)容就加$變量名
I am oldboy.

安裝java服務(wù)的時(shí)候就會(huì)配置環(huán)境變量。
b.局部變量(普通變量)
是編寫(xiě)Shell腳本最常用的變量炊豪。
變量名=值
a=1
變量名:數(shù)字凌箕、字母、下劃線溜在,不能是數(shù)字開(kāi)頭陌知。
oldboy他托、 123a掖肋、_abc
= 等號(hào):賦值符,把什么東西給誰(shuí)赏参。賦值符號(hào)兩邊不能有空格志笼。
值:東西,變量?jī)?nèi)容把篓。
引用內(nèi)容的符號(hào):?jiǎn)我?hào)纫溃、雙引號(hào)、反引號(hào)韧掩、不加引號(hào)

[root@oldboyedu ~]# a=1  
[root@oldboyedu ~]# echo $a
1
[root@oldboyedu ~]# y=$x+1
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y="$x+1"
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y='$x+1'
[root@oldboyedu ~]# echo $y
$x+1
[root@oldboyedu ~]# y=`$x+1`
-bash: 1+1: command not found
[root@oldboyedu ~]# let y="$x+1"  #<==讓括號(hào)的內(nèi)容進(jìn)行計(jì)算紊浩。
[root@oldboyedu ~]# echo $y
2
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo ${a}b
1b
7表達(dá)式

[ 表達(dá)式 ]中括號(hào)表達(dá)式,中括號(hào)里面兩端必須要有空格。

要加雙引號(hào)
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
分段釋義:
[ "a" = "b" ] && echo 1||echo 0
如果表達(dá)式成立坊谁,打印1费彼,否則打印0.
[ "a" = "b" ] && echo 1  #跟屁蟲(chóng)。
如果表達(dá)式成立口芍,打印1
[ "a" = "b" ] || echo 0  #杠精箍铲。
如果表達(dá)式成立是假的,打印0
取反:
[ ! "a" = "b" ] && echo 1

數(shù)表達(dá)式:
-gt >
-ge >=
-lt <
-le <=
-eq =
-ne不等于

[root@oldboyedu ~]# a=1                                              a=1
[root@oldboyedu ~]# [ $a -eq 2 ] && echo 1||echo 0    如果$a=2就打印1不是則打印0
0
[root@oldboyedu ~]# [ $a -eq 1 ] && echo 1 || echo 0   
1

1)整數(shù)表達(dá)式符 兩端必須要有空格
2)中括號(hào)里面兩端必須要有空格鬓椭。
3)變量和比較的內(nèi)容颠猴,不需要加引號(hào)。

符表達(dá)式:

-z 變量?jī)?nèi)容長(zhǎng)度為0時(shí)小染,為真(表達(dá)式正確)翘瓮。zero
-n 變量?jī)?nèi)容長(zhǎng)度【不】為0時(shí),為真(表達(dá)式正確)裤翩。not zero
a == a 字符串是否相同
說(shuō)明:
1)字符串要加雙引號(hào)

例子:
[root@oldboyedu ~]# oldboy="I am oldboy"
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# oldboy=""
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
1
[root@oldboyedu ~]# [ -n "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "host" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "test" ] && echo 1 || echo 0
1
8.shell判斷句:

如果...那么春畔。
如果[ 你是潛力股 ]
那么
就和你談朋友
否則
拜拜
果如

if判斷句語(yǔ)法:
if [ 表達(dá)式 ]
then
命令
fi

如果[ 你是潛力股 ]
那么
就和你談朋友
果如

[root@oldboyedu ~]# cat test.sh 
#!/bin/bash
a=10
if [ $a -gt 1 ]
then
    echo 1
fi

如果[ 你是潛力股 ]
那么
就和你談朋友
否則
拜拜
果如

[root@oldboyedu ~]# cat test.sh
#!/bin/bash
a=1
if [ $a -gt 1 ]
then
    echo 1
else
    echo 0
fi
[root@oldboyedu ~]# cat test.sh 
#!/bin/bash
boy="潛力股"
if [ "$boy" ==  "潛力股" ]
then
    echo "先和你談?wù)勁笥?
else
    echo "白白"
fi
[root@oldboyedu ~]# sh test.sh
先和你談?wù)勁笥?
[root@oldboyedu ~]# cat judge_date.sh
if [ $(date +%w) -eq 6 ]
then 
    echo "一起去旅游吧"
else
    echo "還是好好上課吧"
fi
[root@oldboyedu ~]# sh judge_date.sh
還是好好上課吧
[root@oldboyedu ~]# date
Tue Apr  9 11:33:13 CST 2019
[root@oldboyedu ~]# date -s '2019/4/13'
Sat Apr 13 00:00:00 CST 2019
[root@oldboyedu ~]# sh judge_date.sh
一起去旅游吧

實(shí)現(xiàn)多條件
[root@oldboyedu ~]# cat judge_date.sh 
if [ $(date +%w) -eq 6 ] || [ $(date +%w) -eq 0 ]
then 
    echo "一起去旅游吧"
else
    echo "還是好好上課吧"
fi

read命令 交互式讀取用戶(hù)輸入
-p "提醒:"
-t "多長(zhǎng)時(shí)間內(nèi)等待輸入"

[root@oldboyedu ~]# read -p "請(qǐng)輸入一句話:" boy
請(qǐng)輸入一句話:潛力股
[root@oldboyedu ~]# echo $boy
潛力股

相當(dāng)于boy="潛力股"

[root@oldboyedu ~]# cat test.sh 
#!/bin/bash
read -p "請(qǐng)輸入你喜歡的男孩的一句話:" boy
if [ "$boy" ==  "潛力股" ]
then
    echo "先和你談?wù)勁笥?
else
    echo "白白"
fi
[root@oldboyedu ~]# cat test.sh 
#!/bin/bash
read -p "請(qǐng)輸入你喜歡的男孩的一句話:" boy
if [ "$boy" ==  "潛力股" ]
then
    echo "先和你談?wù)勁笥?

elif [ "$boy" ==  "老爸是李剛" ]
then
   echo "直接嫁給你"

elif [ "$boy" ==  "二環(huán)內(nèi)有套房" ]
then
   echo "立馬領(lǐng)證"

else
    echo "白白"
fi

練習(xí)題:Shell編程實(shí)現(xiàn) 兩個(gè)整數(shù)比較大小

[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
read -p "請(qǐng)輸入兩個(gè)整數(shù):" a b
if [ $a -gt $b ]
then
    echo "$a>$b"
elif [ $a -eq $b ]
then
    echo "$a=$b"
else
    echo "$a<$b"
fi

[root@oldboyedu ~]# sh com_num.sh
請(qǐng)輸入兩個(gè)整數(shù):2 3
2<3
[root@oldboyedu ~]# sh com_num.sh
請(qǐng)輸入兩個(gè)整數(shù):3 3
3=3
[root@oldboyedu ~]# sh com_num.sh
請(qǐng)輸入兩個(gè)整數(shù):3 4
3<4
[root@oldboyedu ~]# sh com_num.sh
請(qǐng)輸入兩個(gè)整數(shù):3 2
3>2

特殊位置變量:
1 腳本文件的第一個(gè)參數(shù)賦值給1
2 腳本文件的第二個(gè)參數(shù)賦值給2

[root@oldboyedu ~]# cat t.sh
echo 12
[root@oldboyedu ~]# sh t.sh oldboy oldgirl
oldboy oldgirl #<==oldboy就是1輸出的結(jié)果,oldgirl就是2輸出的結(jié)果岛都。

9.for循環(huán)

for n in 取值列表
do
執(zhí)行命令
done

[root@oldboyedu ~]# cat for1.sh 
for n in 1 2 3 4 5
do
    echo $n
done
[root@oldboyedu ~]# sh for1.sh
1
2
3
4
5
[root@oldboyedu ~]# sh -x for1.sh
+ for n in 1 2 3 4 5
+ echo 1
1
+ for n in 1 2 3 4 5
+ echo 2
2
+ for n in 1 2 3 4 5
+ echo 3
3
+ for n in 1 2 3 4 5
+ echo 4
4
+ for n in 1 2 3 4 5
+ echo 5
5
打印254個(gè)IP
10.0.0.1---10.0.0.254
[root@oldboyedu ~]# cat for1.sh
for n in {1..254}
do
    echo "10.0.0.$n"
done
課后練習(xí):
1律姨、比較整數(shù)大小。
[root@ltd58 ~]# cat zhengshu.sh 
#!/bin/bash
read -p "請(qǐng)輸入兩個(gè)數(shù)字:" a b
     if [ "$a" -gt "$b" ]
       then
          echo "$a>$b"
     elif [ "$a" -eq "$b" ]
       then
          echo "$a=$b"
     else 
          echo "$a<$b"
     fi

2臼疫、判斷日期择份,每周六日去旅游,其它時(shí)間上課烫堤。

3荣赶、取出當(dāng)前系統(tǒng)Ip地址,判斷是否為10.0.0.31鸽斟,如果是提示正確拔创,如果不是給出提示。
[root@ltd58 ~]# cat ip.sh 
#!/bin/sh
IP=$(hostname -I)
if [ $IP == "10.0.0.31" ]
 then
  echo "正確"
else
  echo "錯(cuò)誤!IP地址為`hostname -I`"
fi
4富蓄、打印10.0.0.1--10.0.0.254個(gè)Ip地址剩燥,:當(dāng)IP地址為系統(tǒng)IP地址時(shí),給出某IP是系統(tǒng)IP的提示立倍。
#!/bin/bash
i=`hostname -I`
for a in 10.0.0.{1..254}
do
  echo $a
if [ $a == $i ]
then
  echo "此為本機(jī)ip地址"
fi
done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灭红,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子口注,更是在濱河造成了極大的恐慌变擒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝志,死亡現(xiàn)場(chǎng)離奇詭異娇斑,居然都是意外死亡策添,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)毫缆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舰攒,“玉大人,你說(shuō)我怎么就攤上這事悔醋∧η裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵芬骄,是天一觀的道長(zhǎng)猾愿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)账阻,這世上最難降的妖魔是什么蒂秘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮淘太,結(jié)果婚禮上姻僧,老公的妹妹穿的比我還像新娘。我一直安慰自己蒲牧,他們只是感情好撇贺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冰抢,像睡著了一般松嘶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挎扰,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天翠订,我揣著相機(jī)與錄音,去河邊找鬼遵倦。 笑死尽超,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梧躺。 我是一名探鬼主播似谁,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燥狰!你這毒婦竟也來(lái)了棘脐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤龙致,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后顷链,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體目代,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榛了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片在讶。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖霜大,靈堂內(nèi)的尸體忽然破棺而出构哺,到底是詐尸還是另有隱情,我是刑警寧澤战坤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布曙强,位于F島的核電站,受9級(jí)特大地震影響途茫,放射性物質(zhì)發(fā)生泄漏碟嘴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一囊卜、第九天 我趴在偏房一處隱蔽的房頂上張望娜扇。 院中可真熱鬧,春花似錦栅组、人聲如沸雀瓢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)致燥。三九已至,卻和暖如春排截,著一層夾襖步出監(jiān)牢的瞬間嫌蚤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工断傲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脱吱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓认罩,卻偏偏與公主長(zhǎng)得像箱蝠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垦垂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • 王文卓 課堂筆記 1宦搬、為什么要學(xué)習(xí)Shell編程? Linux系統(tǒng)中會(huì)大量的使用Shell劫拗,工作中我們也需要自動(dòng)化...
    Wave_e430閱讀 393評(píng)論 0 0
  • Shell編程基礎(chǔ) 1间校、為什么要學(xué)習(xí)Shell編程? Shell編程是Linux運(yùn)維人員必須要會(huì)的編程語(yǔ)言页慷。最簡(jiǎn)單...
    高博666閱讀 611評(píng)論 0 0
  • Shell編程3小時(shí)光速入門(mén) 因?yàn)閃eb集群架構(gòu)會(huì)用到Shell編程基礎(chǔ)憔足,提前講胁附。 跟老男孩學(xué)Linux運(yùn)維:Sh...
    尋找著光輝閱讀 143評(píng)論 0 0
  • 1、為什么要學(xué)習(xí)Shell編程滓彰? Linux系統(tǒng)中會(huì)大量的使用Shell控妻,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù),例如:自...
    余仔丶閱讀 252評(píng)論 0 0
  • 老男孩Linux運(yùn)維58期課堂筆記 ...
    樂(lè)園_YD閱讀 184評(píng)論 0 0