shell指令碼自學筆記

2021-10-03 13:06:30 字數 4415 閱讀 4830

一、 什麼是shell指令碼

shell指令碼並不能作為正式的程式語言,因為它是在linux的shell中執行的,所以稱為shell指令碼。事實上,shell指令碼就是一些命令的集合。

假如完成某個需求需要一口氣輸入10條命令,對於簡單的命令,我們可以直接在shell視窗中輸入,但如果是比較長且複雜的命令,一次一次敲就會顯得很麻煩。我們可以把這10條命令都記錄到乙個文件中,然後去呼叫文件中的命令,這樣就能一步操作完成,以後再遇到這個需求的時候也只需要呼叫這個文件就行了,這個文件就是shell指令碼,只是這個文件有它特殊的格式。

shell指令碼能幫我們很方便地管理伺服器,我們可以指定乙個任務計畫,定時去執行某個shell指令碼以滿足需求。

二、shell指令碼的建立和執行

下面來編寫第乙個指令碼:

vim first.sh #寫入下面內容

#!/bin/bash

## this is my first shell script.

## writen by lzx 2018-7-27

date

echo 「hello world!」

shell指令碼通常都以.sh作為字尾名,不是說不加.sh的指令碼不能執行,只是大家的習慣,這樣也方便辨識。

上面,第一行要以#!/bin/bash開頭,表示該檔案使用的是bash語法,不設定該行也可以執行,但不符合規範。

#表示注釋,後面跟一些該指令碼的相關注釋內容,以及作者、建立日期或版本等。注釋可以省略,但不建議省略,因為我們的記憶力有限,沒有注釋我們自己都不知道自己寫的指令碼是用來幹什麼的、是什麼時候寫的。建議從一開始就要養成寫指令碼的良好習慣,方便自己也方便他人。

下面來執行上面的指令碼:

# sh first.sh #用sh命令來執行

2023年 07月 27日 星期五 09:42:54 cst

hello world!

還有一種執行方式:

# ./first.sh #./表示當前目錄

-bash: ./first.sh: 許可權不夠

# chmod +x first.sh #給執行許可權

# ./first.sh

2023年 07月 27日 星期五 09:44:09 cst

hello world!

使用上面方法來執行shell指令碼的前提是指令碼本身有執行許可權,所以需要給指令碼加乙個x許可權。

另外,使用sh命令來執行指令碼時,可以加-x選項來檢視指令碼的執行過程:

# sh -x first.sh

+ date

2023年 07月 27日 星期五 09:49:22 cst

+ echo 『hello world!』

hello world!

三、命令date

# date #顯示當前時間

四、shell指令碼中的變數

shell指令碼中的變數可以是乙個數值、乙個命令或者乙個路徑。定義變數的格式為:變數名=變數的值,在指令碼中引用變數的值時需要加上符號$。

五、數字運算

在指令碼中進行數字運算,也會用到變數。

下面再自定義乙個指令碼:

#! /bin/bash

## for get the sum of two numbers.

## writen by lzx 2018-7-27

a=1b=2

sum=((((

((a+$b))

echo 「a+a+

a+b=$sum」

1+2=3

數學計算要用((…))括起來,並且前面要加上符號$。

六、獲取使用者輸入

read命令用於和使用者互動,它把使用者輸入的字串作為變數值,用法如下:

#!/bin/bash

## using 『read』 in shell script.

## writen by lzx 2018-7-27

read -p 「please input a number:」 x

read -p 「please input another number:」 y

sum=[

[[x+$y]

echo 「the sum of two numbers is:$sum」

please input a number:5

please input another number:11

the sum of two numbers is:16

七、if語句

不帶else

具體格式如下:

if 判斷語句;then

command

fi下面自定義乙個指令碼:

#!/bin/bash

read -p "please input your score: " a

if ((a<60));then

echo 「you didn』t pass the exam.」

fi上面出現了((a<60))這樣的形式,表示裡面的是乙個數**算,(( ))這是shell指令碼特有的格式,只用乙個小括號或不用括號都會報錯,要記住這個格式。

帶有else

具體格式如下:

if 判斷語句

then

command

else

command

fi帶有elif

具體格式如下:

if 判斷語句1;then

command

elif 判斷語句2;then

command

else

command

fi判斷數值大小除了可以使用((

))的形式外,還可以使用,但不能使用》、<、=這樣的符號了,要使用-lt(小於)、-gt(大於)、-le(小於或等於)、-ge(大於或等於)、-eq(等於)、-ne(不等於)。

八、和文件相關的判斷

shell指令碼中if還經常用於判斷文件的屬性,比如判斷是普通檔案還是目錄,判斷檔案是否可讀、寫、執行許可權等。

if 常用的選項有以下幾個:

-e :判斷檔案或目錄是否存在

-d :判斷是不是目錄以及是否存在

-f :判斷是不是普通檔案以及是否存在

-r :判斷是否有讀許可權

-w :判斷是否有寫許可權

-x :判斷是否有執行許可權

具體格式如下:

if [ -e filename ]

then

command

fi示例如下:

# if [ -d /home/ ]; then echo ok; fi

ok# if [ -f /home/ ]; then echo ok; fi

/home/是目錄而非檔案,所以在判斷它是否為檔案時並不會顯示ok。

九、case邏輯判斷

在shell指令碼中,除了使用if來判斷邏輯外,還可以使用case。

具體格式如下:

case 變數 in

value1)

command

value2)

command

value3)

command

command

esac

下面自定義乙個指令碼:

#!/bin/bash

read -p "input a number: " n

a=$[n%2]

case $a in

1)echo 「the number is odd.」 # odd:奇數

0)echo 「the number is even.」 # even:偶數

echo 「it』s not a number!」

esac

case指令碼常用於編寫系統服務的啟動指令碼。

十、for迴圈

具體格式如下:

for 變數名 in 迴圈的條件

docommand

done

下面自定義乙個指令碼:

#!/bin/bash

for i inseq 1 5; do # seq 1 5 表示從1到5的乙個序列

echo $i

done

上面,迴圈的條件是引用系統命令的執行結果seq 1 5,但必須用反引號括起來。

十一、while

日常運維工作中,也會經常用while迴圈來編寫死迴圈的指令碼,用於監控某項服務。

具體格式如下:

while 條件

docommand

done

下面自定義乙個指令碼:

#!/bin/bash

a=6while [ $a -ge 1]

doecho $a

a=[

[[a-1]

done

另外,可以用乙個冒號:代替迴圈條件,這樣就可以做到死迴圈。

十二、exit

exit,它作用的範圍更大,直接退出整個shell指令碼

shell指令碼快速入門

linux基礎

快速上手linux

linux網路經典案例

shell自學筆記1

shell自學筆記 1.給檔案改名,簡單好記可用 還可用rename mv 原檔名 新檔名 2.echo e 表示開啟開啟反斜槓esc轉義 echo c 關閉自動換行 echo n 換行 九九乘法表 巢狀迴圈 bin bash for i 1 i 9 i do for j 1 j i j dolet...

Shell指令碼筆記

1 home目錄下的 bashrc指令碼檔案記錄提示文字顏色等各類設定 2 bash歷史記錄檔案 bash history 3 echo執行之後會新增換行符 4 bash中不會對單引號變數求值,而是原樣輸出 5 echo e 包含轉義序列的字串 6 var value不同於var value,前者是...

shell指令碼筆記

比較 描述 n1 eq n2 檢查n1是否與n2相等 n1 ge n2 檢查n1是否大於或等於n2 n1 gt n2 檢查n1是否大於n2 n1 le n2 檢查n1是否小於或等於n2 n1 lt n2 檢查n1是否小於n2 n1 ne n2 檢查n1是否不等於n2 1.指令碼sh bin bash...