一、如何抒寫shell指令碼

1、shell指令碼的命名

名字要有意義,不要以a、b、c、1、2、3這種方式命令,建議以sh結尾,在30個位元組內,例如:check_memory.sh

 2、shell指令碼的格式

shell指令碼開頭必須指定執行環境以#!這個特殊組合來組成,如:#!/bin/bash指該指令碼執行解析由/bin/bash來完成

shell的註釋使用#號(執行指令碼的註釋最好使用英文)(#!是特例)

#Author:Mr White
#Created Time:2021/07/17 00:50
#Srcipt Description:nginx install script

二、shell指令碼執行方法

1、指令碼執行需要執行許可權,賦予執行許可權後,該指令碼可以執行

chmod u+x filename

2、不希望賦予指令碼執行許可權,那麼可以使用base命令來執行未給予執行許可權的指令碼

base filename

三、shell中的特殊符號

不要和正則表示式中的符號含義搞混淆了。

~:家目錄 #cd ~代表進入家目錄

! :執行歷史記錄   !!執行上一條命令

$:變數中取內容符

+  -  * / %  :加減乘除餘

&:後臺執行

*:萬用字元,匹配所有

?:萬用字元,匹配一個字元

;:一行執行多個命令,用分號分隔

|:管道符,上一個命令的輸出作為下一個命令的輸入

\:轉義字元

``:反引號,命令中執行命令

' ':單引號,指令碼中字串用單引號引起來,不同與雙引號是的,單引號不解釋變數(兩個單引號可以)

" ":雙引號,指令碼中出現的字串可以用雙引號引起來

四、管道

| :管理符在shell中使用最多,很多組合命令都需要通過管道來完成輸出,管理符其實就是下一個命令對上一個命令的輸出做處理

[root@localhost ~]# cat /etc/passwd | grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

五、重定向

1、重定向輸出:覆蓋原資料

[root@localhost test20210718]# echo haha > ./test.txt
[root@localhost test20210718]# cat test.txt
haha
[root@localhost test20210718]# echo hehe > ./test.txt
[root@localhost test20210718]# cat test.txt
hehe

2、重定向追加輸出:在原資料的末尾新增

[root@localhost test20210718]# echo zhuijia1 >> test.txt
[root@localhost test20210718]# echo zhuijia2 >> test.txt
[root@localhost test20210718]# echo zhuijia3 >> test.txt
[root@localhost test20210718]# cat test.txt
hehe
zhuijia1
zhuijia2
zhuijia3

3、重定向輸入:

[root@localhost test20210718]# wc < test.txt #返回 行 單詞 位元組
4 4 32

4、重定向追加輸入:

[root@localhost test20210718]# wc << EOF
> hello world!!
> EOF
1 2 14

六、shell指令碼中的數學運算

1、expr命令:只能做整數運算,格式比較古板,注意空格

[root@localhost test20210718]# expr 2 + 3
5
[root@localhost test20210718]# expr 2 - 3
-1
[root@localhost test20210718]# expr 2 \* 3
6
[root@localhost test20210718]# expr 2 / 3
0
[root@localhost test20210718]# expr 2 % 3
2

2、使用bc計算器處理浮點運算,scale=2代表小數點保留兩位

[root@localhost test20210718]# free -mh
total used free shared buff/cache available
Mem: 972M 176M 435M 7.7M 360M 647M
Swap: 2.0G 0B 2.0G
[root@localhost test20210718]# expr 435 / 972
0
[root@localhost test20210718]# echo "`echo "scale=2;435*100/972" | bc`%"
44.75%

3、使用let對整數做運算,需要賦值變數

[root@localhost test20210718]# let a=5+1
[root@localhost test20210718]# echo $a
6

4、(())運算子,處理整形

[root@localhost test20210718]# echo $((1+2))
3

七、指令碼退出

exit NUM退出指令碼,釋放系統資源,NUM代表一個整數,代表返回值