一、如何抒寫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代表一個整數,代表返回值