2019-04-09 Day-28 Shell編程基礎

Day28

作者:方維超

歸檔:課堂筆記

時間:2019/4/9

老男孩教育教學核心思想6重:重目標糟秘、重思路黔攒、重方法、重實踐舶斧、重習慣欣鳖、重總結

學無止境,老男孩教育成就你人生的起點茴厉!

一泽台、Shell編程基礎

Shell編程3小時光速入門

因為Web集群架構會用到Shell編程基礎矾缓,提前講

跟老男孩學Linux運維:Shell編程實戰(zhàn)

https://item.jd.com/12117874.html

1怀酷、為什么要學Shell編程

Linux系統(tǒng)中會大量使用Shell,工作中我們也需要自動化實現(xiàn)業(yè)務,

例如:自動備份、監(jiān)控、自動安裝服務

Shell編程是Linux運維人員必須要會的編程語言。最簡單的編程語言茶没。

編程也是運維人員必須具備的本領:

Shell、Python 是運維必備的

2笛求、什么是Shell探入?

Shell就是一個命令解釋器(翻譯官),命令行的命令以及腳本都會通過Shell解釋殃恒,傳給操作系統(tǒng)病附,處理后再輸出給用戶

[root@CentOS-F~]# tail -l /etc/passwd

oldboy:x:1000:1000::/home/oldboy:/bin/bash #《===創(chuàng)建用戶時系統(tǒng)指定的翻譯官

3贮竟、Shell的分類

1)Bourne shell

     Bourne shell又包括Bourne shell (sh)啊送、Korn shell (ksh)、Bourne Again Shell(bash)三種類型婆排。

2)C shell 又包含csh段只、tcsh兩種類型

C7支持的shell

[root@CentOS-F~]# cat /etc/shells

/bin/sh 是bash的軟鏈接

/bin/bash

/usr/bin/sh

/usr/bin/bash

4、C7的默認shell

[root@CentOS-F~]# echo $SHELL

/bin/bash

5、什么是Shell腳本?

程序悉抵、命令放入到文件里執(zhí)行,這個文件稱之為Shell腳本文件岂座。

工作中最多的是編程寫腳本疹瘦,存放在文件里。

6奖年、Shell的變量:

a. 全局變量(環(huán)境變量)

在整個系統(tǒng)中生效中燥、一般是大寫友浸,系統(tǒng)中默認存在一些這樣的變量祭往,滿足系統(tǒng)和程序運行的需求。

系統(tǒng)自帶的環(huán)境變量:

[root@CentOS-F~]# echo PS1 [\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\]\w\[\e[0m\]]\

[root@CentOS-F~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@CentOS-F~]# echo $HOME
/root

[root@CentOS-F~]# echo $SHELL
/bin/bash

自定義環(huán)境變量:

方法1

export OLDBOY=“I am oldboy.”

[root@CentOS-F~]# export OLDBOY="I am oldboy"

[root@CentOS-F~]# echo $OLDBOY

I am oldboy

方法2

OLDBOY=“I am oldboy.”

export OLDBOY

[root@CentOS-F~]# OLDBOY="I am oldboy"

[root@CentOS-F~]# export OLDBOY

[root@CentOS-F~]# echo $OLDBOY

I am oldboy

永久生效的方法:

/etc/profile==>/.bash_profile===>/.bashrc===>/etc/bashrc < 依次被覆蓋

推薦以后把環(huán)境變量放入/etc/bashrc

[root@oldboyedu ~]# tail -1 /etc/bashrc

export OLDBOY="I am oldboy."

[root@oldboyedu ~]# . /etc/bashrc

[root@oldboyedu ~]# echo OLDBOY #<==輸出一個變量內容就加變量名

I am oldboy.

安裝java服務的時候就會配置環(huán)境變量

b.局部變量(普通變量)

是編寫Shell腳本最常用的變量火窒。

變量名=值

例如:a=1硼补,

變量名:數(shù)字、字母熏矿、下劃線已骇,不能是數(shù)字開頭

= 等號:賦值符离钝,把什么東西給誰。賦值符號兩邊不能有空格褪储。

值:東西卵渴,變量內容

引用內容的符號:單引號(所見即所得)、雙引號()鲤竹、反引號(解析命令)浪读、不加引號(同雙引號)

[root@CentOS-F~]# a=1

[root@CentOS-F~]# echo $a

1

[root@CentOS-F~]# x=1

[root@CentOS-F~]# y=$x+1

[root@CentOS-F~]# echo $y

1+1

[root@CentOS-F~]# let y=“$x+1” #<==== let 讓括號里的內容進行計算

[root@CentOS-F~]# echo $y

2

[root@CentOS-F~]# a=1

[root@CentOS-F~]# echo $a

1

[root@CentOS-F~]# echo ${a}b

1b

7、表達式

[ 表達式 ] 中括號表達式辛藻,中括號里面兩端必須要有空格碘橘,可以有多個,至少有一個吱肌。

字符串要加雙引號

[root@CentOS-F~]# [ a=a ] &&echo 1||echo 0
1

[root@CentOS-F~]# [ a=b ] &&echo 1||echo 0
1

[root@CentOS-F~]# [ "a" = "b" ] &&echo 1||echo 0 #如果表達式成立痘拆,打印1,否則打印0
0

[root@CentOS-F~]# [ "a" = "b" ] &&echo 1 #如果表達式成立氮墨,打印1纺蛆,不成立不打印

[root@CentOS-F~]# [ "a" = "b" ] ||echo 0 #杠精 如果表達式是假的,打印0
0

[root@CentOS-F~]# [ ! "a" = "b" ] &&echo 1 #取反
1

整數(shù)表達式:

(大于) -gt

= (大于等于) -ge

< (小于) -lt

<= (小于等于) -le

= (等于) -eq

 不等于       -ne

[root@CentOS-F~]# a=1

[root@CentOS-F~]# [ $a -eq 2 ] && echo 1||echo 2
2

[root@CentOS-F~]# [ $a -eq 1 ] && echo 1||echo 2
1

[root@CentOS-F~]# a=1

[root@CentOS-F~]# b=3

[root@CentOS-F~]# [ a -gtb ] && echo 1||echo 2
2

1)整數(shù)表達式符 兩端必須要有空格

2)中括號里面兩端必須要有空格

3)變量和比較的內容勇边,不需要加引號

字符表達式

-z 變量內容長度為0時犹撒,為真(正確)。zero

-n 變量內容長度【不】為0時粒褒,為真(正確)识颊。not zero

a==a 雙等號 字符串是否相同

說明:

1)字符串要加雙引號

例子:

[root@CentOS-F~]# oldboy="I am oldboy"

[root@CentOS-F~]# [ -z "$oldboy" ] && echo 1 || echo 0
0

[root@CentOS-F~]# oldboy=""

[root@CentOS-F~]# [ -z "$oldboy" ] && echo 1 || echo 0
1

[root@CentOS-F~]# [ -n "$oldboy" ] && echo 1 || echo 0
0

[root@CentOS-F~]# [ "你" == "我" ] && echo 1 || echo 0
0

8、判斷句:

如果…那么奕坟。

如果[ 你是潛力股 ]

   那么

就和你談朋友

否則

   拜拜

if判斷句語法:

if [ 表達式 ]

then

命令

fi

如果[ 你是潛力股 ]

那么

就和你談朋友

果如

[root@CentOS-F~]# vim test.sh

!/bin/bash

a=10

if [ $a -gt 1 ]

then

echo 1

fi

~

"test.sh" 6L, 52C written

[root@CentOS-F~]# bash test.sh

1

[root@CentOS-F~]# vim test.sh

!/bin/bash

a=3

if [ $a -gt 5 ]

then

echo 1

fi

echo 2

~

"test.sh" 7L, 61C written

[root@CentOS-F~]# bash test.sh

2

[root@CentOS-F~]# vim test.sh

!/bin/bash

boy="潛力股"

if [ "$boy" == "潛力股" ]

then

echo "先和你談談朋友"

else

echo "拜拜"

fi

~

"test.sh" 8L, 122C written

[root@CentOS-F~]# bash test.sh

先和你談談朋友

[root@CentOS-F~]# vim juide_date.sh

if [ $(date +%w) -eq 2 ]

then

echo "一起睡覺"

else

echo "一起游戲"

fi

~

"juide_date.sh" [New] 6L, 86C written

[root@CentOS-F~]# bash juide_date.sh

一起睡覺

實現(xiàn)多條件用 || 符號

[root@oldboyedu ~]# cat judge_date.sh

if [ (date +%w) -eq 6 ] || [(date +%w) -eq 0 ]

then

echo "一起去旅游吧"

else

echo "還是好好上課吧"

fi

read 命令祥款,交互式讀取用戶輸入

-p “提醒:”

-t “多長時間內等待輸入”

[root@CentOS-F~]# read -t 3 -p "請輸入一句話:"

請輸入一句話:[root@CentOS-F~]#

[root@CentOS-F~]# read -p "請輸入一句話:" boy

請輸入一句話:潛力股

[root@CentOS-F~]# echo $boy

潛力股

[root@oldboyedu ~]# cat test.sh

!/bin/bash

read -p "請輸入你喜歡的男孩的一句話:" boy
if [ "$boy" == "潛力股" ]
then
echo "先和你談談朋友"
else
echo "白白"
fi

[root@oldboyedu ~]# sh test.sh
請輸入你喜歡的男孩的一句話:
我沒錢
白白
[root@oldboyedu ~]# sh test.sh
請輸入你喜歡的男孩的一句話:潛力股
先和你談談朋友

https://blog.51cto.com/oldboy/1864839

特殊位置變量:

$1 腳本文件的第一個參數(shù)

$2 腳本文件的第二個參數(shù)

[root@oldboyedu ~]# cat t.sh
echo 12
[root@oldboyedu ~]# sh t.sh oldboy oldgirl
oldboy oldgirl

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 -x#<====查看輸出過程 + 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

[root@CentOS-F~]# vim for.sh

for n in 10.0.0{1..254}

do

echo $n

done

[root@CentOS-F~]# vim for.sh

for n in {1..254}

do

echo “10.0.0.$n”

done

注意:
1.read -p "請輸入兩個整數(shù)" a b,這個怎么理解,為什么不是寫a,b 因為read命令 -p 和 雙引號里的屬于提示,不用管. 而后面的a b是變量,相當于在外面寫變量a=1,變量b=2(用1,2舉例),而a,b是解析變量并取出里面的值來進行比較
2.a=1 b=2怎樣理解,例如sh int.sh 1 2可以理解為,把1給了第一個變量,把2給了第二個變量,1解析出第一個變量給了a,2解析出第二個變量給了b

練習:

[root@CentOS-F~]# vim 1.sh

!/bin/sh

read -p "請輸入兩個整數(shù):" a b

if [ a -gtb ]

then

echo "a >b"

elif [ a -eqb ]

then

echo "a =b"

elif [ a -ltb ]

then

echo "a <b"

else

echo " "

fi

~

練習:

[root@CentOS-F~]# vim juide_date.sh

!/bin/bash

read -p "請輸入你喜歡的男孩子的一句話:" boy

if [ "$boy" == "潛力股" ]

then

echo "先和你談談朋友"

elif [ "$boy" == "帥" ]

then

▽ echo "你想干啥"

elif [ "$boy" == "丑" ]

then

echo "你好萌"

else

fi

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

[root@oldboyedu ~]# cat com_num.sh

!/bin/sh

read -p "請輸入兩個整數(shù):" a b

if [ a -gtb ]

then

echo "a>b"

elif [ a -eqb ]

then

echo "a=b"

else

echo "a<b"

fi

[root@oldboyedu ~]# sh com_num.sh

請輸入兩個整數(shù):2 3

2<3

[root@oldboyedu ~]# sh com_num.sh

請輸入兩個整數(shù):3 3

3=3

[root@oldboyedu ~]# sh com_num.sh

請輸入兩個整數(shù):3 4

3<4

[root@oldboyedu ~]# sh com_num.sh

請輸入兩個整數(shù):3 2

3>2

書寫腳本習慣:

  1. 以.sh結尾月杉。

  2. 腳本開頭第一行 #!/bin/bash 腳本內容有誰來解釋刃跛。

由于Linux下默認時bash,所以可以不寫這行苛萎。

課后練習:

1桨昙、比較整數(shù)大小。

[root@CentOS-F~]# vim 整數(shù).sh

!/bin/bash

read -p "請輸入兩個整數(shù):" a b

if [ a -gtb ]

then

echo "a>b"

elif [ a -eqb ]

then

echo "a=b"

else

echo "a<b"

fi

~

"整數(shù).sh" [New] 12L, 157C written

[root@CentOS-F~]# bash 整數(shù).sh

請輸入兩個整數(shù):2 3

2<3

[root@CentOS-F~]# bash 整數(shù).sh

請輸入兩個整數(shù):9 9

9=9

[root@CentOS-F~]# bash 整數(shù).sh

請輸入兩個整數(shù):4 1

4>1

2腌歉、判斷日期蛙酪,每周六日去旅游,其它時間上課翘盖。

[root@CentOS-F~]# vim 旅游.sh

!/bin/bash

if [ (date +%w) -eq 6 ]||[(date +%w) -eq 0 ]||[ $(date +%w) -eq 2 ]

then

echo "一起去旅游"

else

echo "一起去上課"

fi

~

"旅游.sh" 7L, 150C written

[root@CentOS-F~]# bash 旅游.sh

一起去旅游

3桂塞、取出當前系統(tǒng)Ip地址,判斷是否為[圖片上傳失敗...(image-8c2208-1554814171245)] 10.0.0.31馍驯,如果是提示正確阁危,如果不是給出提示玛痊。**

[root@CentOS-F~]# vim IP.sh

!/bin/bash

read -p "請輸入IP:" a

if [ "$a" == hostname -I ]

then

echo -e "\033[41;36;1m "正確" \033[0m"

elif [ "$a" == "10.0.0.31" ]

then

echo -e "\033[41;36;1m "錯誤" \033[0m"

fi

~

~

"IP.sh" 9L, 201C written

[root@CentOS-F~]# bash IP.sh

請輸入IP:10.0.0.200

正確

[root@CentOS-F~]# bash IP.sh

請輸入IP:10.0.0.31

錯誤

4、打印[圖片上傳失敗...(image-40ffcf-1554814171245)] 10.0.0.1--[圖片上傳失敗...(image-1187b3-1554814171245)] 10.0.0.254個Ip地址狂打,當IP地址為系統(tǒng)IP地址時擂煞,給出某IP是系統(tǒng)IP的提示。**

[root@CentOS-F~]# vim 打印.sh

!/bin/bash

for n in {1..254}

do

a=10.0.0.$n

echo "$a"

if [ $a == hostname -I ]

then

echo "$a 本機IP"

fi

done

~

"打印.sh" 10L, 130C written

[root@CentOS-F~]# bash 打印.sh

10.0.0.1

10.0.0.2

…….

10.0.0.199

10.0.0.200

10.0.0.200 本機IP

10.0.0.201

10.0.0.202

……

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末菱父,一起剝皮案震驚了整個濱河市颈娜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浙宜,老刑警劉巖官辽,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粟瞬,居然都是意外死亡同仆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門裙品,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俗批,“玉大人,你說我怎么就攤上這事市怎∷晖” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵区匠,是天一觀的道長干像。 經(jīng)常有香客問我,道長驰弄,這世上最難降的妖魔是什么麻汰? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮戚篙,結果婚禮上五鲫,老公的妹妹穿的比我還像新娘。我一直安慰自己岔擂,他們只是感情好位喂,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乱灵,像睡著了一般忆某。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阔蛉,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音癞埠,去河邊找鬼状原。 笑死聋呢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的颠区。 我是一名探鬼主播削锰,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毕莱!你這毒婦竟也來了器贩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤朋截,失蹤者是張志新(化名)和其女友劉穎蛹稍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體部服,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡唆姐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了廓八。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奉芦。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剧蹂,靈堂內的尸體忽然破棺而出声功,到底是詐尸還是另有隱情,我是刑警寧澤宠叼,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布先巴,位于F島的核電站,受9級特大地震影響车吹,放射性物質發(fā)生泄漏筹裕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一窄驹、第九天 我趴在偏房一處隱蔽的房頂上張望朝卒。 院中可真熱鬧,春花似錦乐埠、人聲如沸抗斤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑞眼。三九已至,卻和暖如春棵逊,著一層夾襖步出監(jiān)牢的瞬間伤疙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徒像,地道東北人黍特。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像锯蛀,于是被迫代替她去往敵國和親灭衷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容