Shell編程3小時(shí)光速入門

Shell編程3小時(shí)光速入門

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),處理后在輸出給用戶。

3、Shell的分類

/bin/sh、/bin/bash、/usr/bin/sh、/usr/bin/bash

4、CentOS7默認(rèn)Shell

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

5、什么是Shell腳本?

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

6、Shell的變量:

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

在整個(gè)系統(tǒng)中生效、一般是大寫、系統(tǒng)中會(huì)默認(rèn)存在這樣的變量,滿足系統(tǒng)和程序運(yùn)行的需求。
系統(tǒng)自帶的環(huán)境變量;

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

自定義環(huán)境變量:
方案一:
方案二:

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

是編寫Shell腳本最常用的變量
用法:變量名=值(a=1)

要求

變量名:數(shù)字、字母、下劃線、不能是數(shù)字開(kāi)頭。
=等號(hào):賦值符(把XXX給誰(shuí))。
值:東西,變量?jī)?nèi)容
引用內(nèi)容的符號(hào):?jiǎn)我?hào)、雙引號(hào)、反引號(hào)、不加引號(hào)
舉例:

[root@zhang ~]# a=1
[root@zhang ~]# echo $a
1
[root@zhang ~]# a=1
[root@zhang ~]# echo ${a}b
1b

7、表達(dá)式

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

[root@zhang ~]# [ "a" = "b" ] &&echo 1|echo 0   #<==如果表達(dá)式成立,打印1,否者打印0.
0
[root@zhang ~]# [ "a" = "b" ] || echo 0  #<==如果表達(dá)式成立是假的,打印0
0

取反:

[root@zhang ~]# [ ! "a" = "b" ] &&echo 1
1

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

[root@zhang ~]# a=1
[root@zhang ~]# echo $a
1
[root@zhang ~]# [ $a -gt 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -ge 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -lt 2 ] &&echo 1||echo 0
1
[root@zhang ~]# [ $a -le 2 ] &&echo 1||echo 0
1
[root@zhang ~]# [ $a -eq 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -ne 2 ] &&echo 1||echo 0
1

(1)整數(shù)表達(dá)式符 兩端必須要有空格。
(2)中括號(hào)里面兩端必須要有空格。
(3)變量和比較的內(nèi)容,不需要加引號(hào)。
字符表達(dá)式:
-z 變量?jī)?nèi)容長(zhǎng)度為0,為真。zero
-n 變量?jī)?nèi)容長(zhǎng)度為【不】為0時(shí),為真。not zero
a==a字符串時(shí)=是否相同 條件:
①字符串要加雙引號(hào)

[root@zhang ~]# a="I am munan"
[root@zhang ~]# [ -n "$a" ] &&echo 1||echo 0
1
[root@zhang ~]# [ -z "$a" ] &&echo 1||echo 0
0

Shell判斷句:
如果。。。那么
如果[ 我是DJ ] 那么你會(huì)愛(ài)我嗎
if判斷句語(yǔ)法:
if [ 表達(dá)式 ]
then命令
fi
舉例:

[root@zhang ~]# vim munan.sh 
#!/bin/bash
a=1
if  [ $a -eq 1 ]
then
    echo 1
fi
[root@zhang ~]# vim munan.sh 
#!/bin/bash
munan="DJ"
if  [ "$munan" == "DJ" ]
then
     echo "和你談?wù)劺硐?
else
     echo "拜拜 "
fi
[root@zhang ~]# sh munan.sh 
和你談?wù)劺硐?
[root@zhang ~]# vim date.sh
if [ $(date +%w) -eq 6 ]
then
    echo "休息"
else
    echo "上課"
fi

7、read命令 交互式讀取用戶輸入

-p "提醒:"
-t "多長(zhǎng)時(shí)間內(nèi)等待輸入"

[root@zhang ~]# 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@zhang  ~]# sh test.sh
請(qǐng)輸入你喜歡的男孩的一句話:我沒(méi)錢
白白
[root@zhang  ~]# sh test.sh
請(qǐng)輸入你喜歡的男孩的一句話:潛力股
先和你談?wù)勁笥?root@zhang ~]# 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ù)比較大小
特殊位置變量:
1 腳本文件的第一個(gè)參數(shù)賦值給1
2 腳本文件的第二個(gè)參數(shù)賦值給2

[root@zhang ~]# cat t.sh
echo $1 $2
[root@zhang ~]# sh t.sh ZZZ XXX
ZZZ XXX  #<==ZZZ就是$1輸出的結(jié)果,XXX就是$2輸出的結(jié)果。
[root@zhang ~]# 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@zhang~]# cat for1.sh 
for n in 1 2 3 4 5
do
    echo $n
done
[root@zhang~]# sh for1.sh
1
2
3
4
5
[root@zhang~]# 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@zhang~]# cat for1.sh
for n in {1..5}
do
    echo $n
done
[root@zhang~]# sh for1.sh
1
2
3
4
5

練習(xí)題:打印254個(gè)IP
書寫腳本習(xí)慣:
1)以.sh結(jié)尾
2)腳本開(kāi)頭第一行#!/bin/bash 腳本內(nèi)容由誰(shuí)解釋。
由于Linux下默認(rèn)時(shí)bash,所以也可以忽略這一行

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 路遇杭州一場(chǎng)春
    cici你好_cici再見(jiàn)閱讀 282評(píng)論 2 2
  • 七月與安生這兩個(gè)名字充滿了文藝味道,拿它做《電影》的片名,大抵知道這是個(gè)什么類型的電影。周冬雨和馬思純你熟悉嗎,山...
    陳笑鷗兒閱讀 554評(píng)論 1 3
  • 光頭和我說(shuō)沒(méi)生氣吧,其實(shí)應(yīng)該多換位思考,遇事要即時(shí)溝通反饋,拖的越久事情越大,簡(jiǎn)單的事簡(jiǎn)單做,榜樣說(shuō)的無(wú)愧于心就好
    日落絢閱讀 166評(píng)論 0 1
  • 是夜,寧?kù)o而深邃~ 在本該酣睡的時(shí)候醒來(lái),突然想寫點(diǎn)什么,一來(lái)記錄這段時(shí)間的所見(jiàn)所聞,二來(lái)也學(xué)著用簡(jiǎn)書表達(dá)自己的情...
    Hollyhao閱讀 157評(píng)論 0 0

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