day28-Shell腳本基礎(chǔ)

SHELL編程基礎(chǔ)

三小時(shí)光速入門
因?yàn)榧杭軜?gòu)會(huì)用到shell編程基礎(chǔ),提前講一丟丟。

shell編程

1. 為什么學(xué)shell編程?

Linux系統(tǒng)中大量的使用shell,工作中需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù)。例:每天晚上自動(dòng)備份、監(jiān)控CPU、批量安裝、自動(dòng)安裝服務(wù)。你就需要shell
shell編程是linux運(yùn)維人員必須要會(huì)的編程語(yǔ)言,最簡(jiǎn)單的編程語(yǔ)言。(沒(méi)有之一)
編程也是運(yùn)維人員必須具備本領(lǐng)
shell 、python 編程也是運(yùn)維人員必須具備本領(lǐng),特別是高級(jí)運(yùn)維人員

2. 什么是shell?

shell是一個(gè)解釋器,命令行的命令以及腳本都會(huì)通過(guò)shell進(jìn)行解釋,傳給操作系統(tǒng),處理后輸出給用戶
bin/bash 創(chuàng)建用戶時(shí)系統(tǒng)指定的翻譯官

3. shell分類

1、bourne shell
2、C shell

[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

4. c7 :默認(rèn)shell

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

5. 什么是shell 腳本

一般我們會(huì)把程序、命令放入文件里執(zhí)行,這個(gè)文件我們就稱為shell腳本
工作中最多的編程寫(xiě)腳本,存放在文件里

6. shell 變量

a. 全局變量(環(huán)境變量)
在整個(gè)系統(tǒng)中生效、一般是大寫(xiě)、系統(tǒng)中會(huì)默認(rèn)存在一些這樣的變量,用于滿足系統(tǒng)和程序運(yù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/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

自定義環(huán)境變量:
方法1
export OLDBOY="I am oldboy"
方法2
OLDBOY="I am oldboy"
export OLDBOY

永久生效:
/etc/peofile會(huì)被/.bash_profilef會(huì)被/.banshrc會(huì)被/etc/bashrc覆蓋
把變量放到上述文件里
安裝JAVA服務(wù)時(shí)候會(huì)配置環(huán)境變量

b.局部變量(普通變量)
是編寫(xiě)shell腳本最常用的變量。
變量名=值
a=1
變量名:數(shù)字、字母、下劃線,不能是數(shù)字開(kāi)頭。常見(jiàn)的是字母開(kāi)頭
= 等號(hào) :賦值符,把什么東西給誰(shuí),賦值符號(hào)兩邊不能有空格
值:就是具體分東西,變量?jī)?nèi)容
引用內(nèi)容的符號(hào):?jiǎn)我?hào),雙引號(hào),反引號(hào),不加引號(hào)
let 讓引號(hào)中的東西進(jìn)行計(jì)算

7. 表達(dá)式

[ 表達(dá)式 ] 表達(dá)式
中括號(hào)兩端(兩邊)必須有空格

[root@oldboyedu ~]# [ "a" = "a" ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "a" ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ "a" = "1" ] && echo 1||echo 0
0

前面正確輸出1錯(cuò)誤輸出0

整數(shù)表達(dá)式 字符
> -gt
>= -ge
< -lt
<= -le
= -eq
不等于 -ne
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# [ "a" eq 1 ] && echo 1
-bash: [: eq: binary operator expected
[root@oldboyedu ~]# [ "a" -eq 1 ] && echo 1
-bash: [: a: integer expression expected
[root@oldboyedu ~]# [ "a" -eq  1 ] && echo 1
-bash: [: a: integer expression expected
[root@oldboyedu ~]# [ $a -eq  1 ] && echo 1
1
[root@oldboyedu ~]# [ $a -ne  1 ] && echo 1
[root@oldboyedu ~]# [ $a -ne  2 ] && echo 1
1
[root@oldboyedu ~]# [ $a -ne  3 ] && echo 1
1
[root@oldboyedu ~]# [ $a -eq  3 ] && echo 1
[root@oldboyedu ~]# [ $a -eq  3 ] && echo 1

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

oldboy="I am oldboy"
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# oldboy=""
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
真
[root@oldboyedu ~]# [ -n "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -n "$oldboy" ] &&echo 真 || echo 假
假
[root@oldboyedu ~]# [ -z "$oldboy" ] &&echo 真 || echo 假
真

8. shell判斷句 :

如果 ....那么 ....
if 判斷句語(yǔ)法:
if [ 表達(dá)式 ]
then
fi
elif 多條件
書(shū)寫(xiě)腳本習(xí)慣:
1 以.sh結(jié)尾
2 腳本開(kāi)頭第一行 #!/bin/bash 腳本內(nèi)容由誰(shuí)解釋
由于linux下默認(rèn)是bash 所以也可以不用寫(xiě)著一行
read 命令 讀取用戶輸入
-p “提醒“
-t “多長(zhǎng)時(shí)間內(nèi)等待輸入“

[root@oldboyedu ~]# vim test.sh 
  1 #!/bin/bash
  2 read -p  "請(qǐng)輸入一句話"  boy
  3 if [ "$boy" == "潛力股"  ]
  4 then
  5     echo "先和你談?wù)勁笥?
  6 else
  7     echo "白白"
  8 fi

輸入兩個(gè)整數(shù),比較大小

[root@oldboyedu ~]# vim  daxiao.sh
  1 #!/bin/bash
  2 read -p “輸入整數(shù):” a b
  3 if [ "$a" -gt "$b"  ]
  4 then
  5     echo "$a>$b"
  6 elif [ "$a" -lt "$b" ]
  7 then
  8    echo "$a<$b"
  9 else 
 10    echo "$a=$b"
 11 fi

特殊位置變量
$1腳本文件的第一個(gè)參數(shù)
$2 腳本文件的第二個(gè)參數(shù)
另一種方法

  #!/bin/bash
  a=$1
   b=$2
  if [ "$a" -gt "$b"  ]
  then
      echo "$a>$b"
  elif [ "$a" -lt "$b" ]
  then
      echo "$a<$b"
  else 
     echo "$a=$b"
  fi

9. for 循環(huán)

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

?著作權(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)容

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