day28 shell編程基礎(chǔ)

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)維人員必須要回的編程語(yǔ)言。 最簡(jiǎn)單的編程語(yǔ)言。
編程也是運(yùn)維人員必須具備的本領(lǐng):
Shell、Python是運(yùn)維人員必須具備的本領(lǐng)

2、什么是Shell???

Shell就是一個(gè)解釋器(翻譯官),命令行的命令以及腳本都會(huì)通過(guò)Shell解釋,
[root@oldboyetu/]# tail -1 /etc/passwd
oldboy1:x:1004:1004::/home/oldboy1:/bin/bash =====>傳輸給操作系統(tǒng),處理后再輸出給用戶。

創(chuàng)建用戶時(shí),系統(tǒng)指定的翻譯官

3、Shell分類

1、Bourne Shedll
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三種類型。
2、 C shell
C shell又包括csh、tcsh兩種類型。

C7支持的Shell:
[root@oldboyetu/]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/sh是bash的軟連接

4、C7:默認(rèn)Shell

[root@oldboyedu ~]# echo $SHELL
/bin/bash

5、什么時(shí)Shell腳本?

程序、命令放入文件里執(zhí)行,這個(gè)文件稱為Shell腳本文件。
工作中最多的編程是寫(xiě)腳本,存放在文件里。

6、Shell變量:

a、全局變量(環(huán)境變量)
在整個(gè)系統(tǒng)中生效、一般是大寫(xiě)、系統(tǒng)中默認(rèn)就存在一些這樣的變量,
滿足系統(tǒng)和程序運(yùn)行的需求
系統(tǒng)自帶的環(huán)境變量:
[root@oldboyedu ~]# echo PS1 [\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\

[root@oldboyedu ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@oldboyedu ~]# echo HOME /root [root@oldboyedu ~]# echoSHELL
/bin/bash
[root@oldboyedu ~]# echo $UID
0
自定義環(huán)境變量:
方法1:
export OLDBOY=“I am oldboy.”
方法2:
ODBOY=“I am oldboy.”
export OLDBOY 臨時(shí)生效

[root@oldboyedu ~]# export OLDBOY="I am oldboy."
[root@oldboyedu ~]# 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 #<==輸出一個(gè)變量?jī)?nèi)容就加變量名
I am oldboy.

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

b、局部變量(普通變量) 是編寫(xiě)Shell腳本最常用的
用法: 變量名=值
a=1 變量名: 數(shù)字、字母、下劃線,不能是數(shù)字開(kāi)頭。
=等號(hào):賦值符 把什么東西給誰(shuí)。賦值符號(hào)兩邊不能有空格
值:變量?jī)?nèi)容 ,東西
值分為幾種
引用內(nèi)容的符號(hào): 單引號(hào)、雙引號(hào)、 反引號(hào)、不加引號(hào)
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo $a
1

[root@oldboyedu ~]# y=x+1 [root@oldboyedu ~]# echoy
1+1
[root@oldboyedu ~]# y="x+1" [root@oldboyedu ~]# echoy
1+1
[root@oldboyedu ~]# y='x+1' [root@oldboyedu ~]# echoy
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 ~]# echoy
2

[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo {a}b 1b [root@oldboyetu~]# echo{a}b #=====>>
1b

7、表達(dá)式

[ 表達(dá)式 ]中括號(hào)表達(dá)式,中括號(hào)兩端必須要有空格。語(yǔ)法要求
字符串要加雙引號(hào)
[root@oldboyetu~]# [ "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
[root@oldboyedu ~]# [ a -eq 2 ] && echo 1||echo 0 0 [root@oldboyedu ~]# [a -eq 1 ] && echo 1 || echo 0
1
1)整數(shù)表達(dá)式符 兩端必須要有空格
2)中括號(hào)里面兩端必須要有空格

  1. 變量和比較的內(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)
eg:
[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 果如

eg:[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 ~]# 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命令 交互式讀取用戶輸入
-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 ~]# sh test.sh
請(qǐng)輸入你喜歡的男孩的一句話:我沒(méi)錢
白白
[root@oldboyedu ~]# sh test.sh
請(qǐng)輸入你喜歡的男孩的一句話:潛力股
先和你談?wù)勁笥?/p>

[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é)果。

[root@oldboyedu ~]# cat com_num.sh
#!/bin/sh
#read -p "請(qǐng)輸入兩個(gè)整數(shù):" a b
a=$1
b=$2
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 2 3
2<3
[root@oldboyedu ~]# sh com_num.sh 2 2
2=2
[root@oldboyedu ~]# sh com_num.sh 3 2
3>2

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

[root@oldboyedu ~]# cat for1.sh
for n in {1..5}
do
echo $n
done
[root@oldboyedu ~]# sh for1.sh
1
2
3
4
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

read命令 讀取用戶輸入
-p “提醒”
-t “多長(zhǎng)時(shí)間內(nèi)等待輸入”

書(shū)寫(xiě)腳本習(xí)慣:
1、以.sh結(jié)尾
2、#!/bin/bash 腳本內(nèi)容由誰(shuí)解釋
由于Linux 下默認(rèn)是bash,所以也可以不寫(xiě)這一行

課后練習(xí):
1、比較整數(shù)大小。
2、判斷日期,每周六日去旅游,其它時(shí)間上課。
3、取出當(dāng)前系統(tǒng)Ip地址,判斷是否為10.0.0.31,如果是提示正確,如果不是給出提示。
4、打印10.0.0.1--10.0.0.254個(gè)Ip地址,當(dāng)IP地址為系統(tǒng)IP地址時(shí),給出某IP是系統(tǒng)IP的提示。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、為什么要學(xué)習(xí)Shell編程? Linux系統(tǒng)中會(huì)大量的使用Shell,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù),例如:自...
    余仔丶閱讀 290評(píng)論 0 0
  • Day 28 作者:翟玉龍 歸檔:課堂筆記 2019/3/08 快捷鍵: Ctrl + 1 標(biāo)題****1 Ctr...
    Linux_淡忘閱讀 220評(píng)論 0 0
  • Shell編程3小時(shí)光速入門 因?yàn)閃eb集群架構(gòu)會(huì)用到Shell編程基礎(chǔ),提前講。 跟老男孩學(xué)Linux運(yùn)維:Sh...
    尋找著光輝閱讀 188評(píng)論 0 0
  • Day28 作者:方維超 歸檔:課堂筆記 時(shí)間:2019/4/9 老男孩教育教學(xué)核心思想6重:重目標(biāo)、重思路、重方...
    Ffvc閱讀 370評(píng)論 0 1
  • 王文卓 課堂筆記 1、為什么要學(xué)習(xí)Shell編程? Linux系統(tǒng)中會(huì)大量的使用Shell,工作中我們也需要自動(dòng)化...
    Wave_e430閱讀 446評(píng)論 0 0

友情鏈接更多精彩內(nèi)容