本文參考鏈接:
[1] https://blog.csdn.net/oqqHuTu12345678/article/details/71319006
[2] https://www.cnblogs.com/tongye/p/9707590.html
- 第一行一般為
#!/bin/sh
以#!開始违寿,/bin/sh指定/bin目錄下的sh可執(zhí)行程序執(zhí)行
#!/bin/bash
(用bash作為解釋器)
#!/bin/dash
(ubuntu中默認(rèn)使用dash) - shell不需要編譯袭祟,編輯完直接運(yùn)行
- 弱類型語言调煎,沒有類型概念
- 區(qū)分大小寫
變量類型
-
自定義變量(局部變量)
一般以小寫字母命名 -
環(huán)境變量
一般用大寫字母命名
export 變量名=變量值
# 創(chuàng)建環(huán)境變量并賦值
-
位置參數(shù)變量
向腳本中傳遞參數(shù)或數(shù)據(jù)
-
預(yù)定義變量
bash中定義好的變量蔫磨,包含位置參數(shù)變量和$?(保存最后一次執(zhí)行的命令的返回狀態(tài)。如果 $? 的值為 0 主穗,則表明上一個(gè)命令成功執(zhí)行泻拦;如果值非 0 ,則表明上一個(gè)命令沒有成功執(zhí)行忽媒。)和$!(用于保存后運(yùn)行的最后一個(gè)進(jìn)程的 PID 號争拐。)
賦值
- 賦值語句=兩邊不能有空格
- 新的變量賦值會(huì)覆蓋老的賦值
引用
- 用$符號引用變量(變量解釋引用符)
如果未查詢到,賦值為一個(gè)新的空變量
${var}
刪除
- 刪除變量
unset var
輸出
- 輸出 echo ‘content’
- 在bash環(huán)境下晦雨,感嘆號只能通過單引號包圍來輸出
\# echo Hello World!
可以
\# echo 'Hello World!'
可以
\# echo “Hello World!”
不可以會(huì)報(bào)錯(cuò)
雙引號里面可以有變量架曹,可以出現(xiàn)轉(zhuǎn)義字符- $加變量名-取變量的值
- \轉(zhuǎn)義字符
\$ \' \" \\
條件循環(huán)
- if語句
if[表達(dá)式]
then
xxx
else
yyy
fi
或
if[表達(dá)式]
then
xxx
elif [表達(dá)式]
then
yyy
else
zzz
fi
- for循環(huán)
for b變量 in 列表
do
command1
command2
···
done
- while循環(huán)
while command
do
Statement(s) to be excuted if command is true
done
#例子
COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER=’expr $COUNTER+1‘
echo $COUNTER
done
#讀取鍵盤信息輸入信息為FILM,按<ctrl-D>結(jié)束循環(huán)
echo 'type <Ctrl-D> to terminate'
echo -n 'enter your most liked film:'
while read FILM
do
echo "Yeah! great film the $FILM"
done
- case語句
shell中的case默認(rèn)就是匹配上哪個(gè)執(zhí)行哪個(gè)闹瞧,不會(huì)執(zhí)行完其中一個(gè)后繼續(xù)執(zhí)行后面的其他case绑雄。
case $aNum in
1) echo '1'
;;
2) echo '2'
;;
*) echo 'you do not select a number between 1 and 2'
;;
esac
- break語句
嵌套循環(huán)中break后可以跟一個(gè)整數(shù)表明跳出第幾層循環(huán)
文件測試
-
test -e
如果文件存在則為真,一般與if同用
重定向至文件/追加輸入文件
- > 這個(gè)符號
echo ”it is a test“ > myfile
運(yùn)算符
算術(shù)運(yùn)算符
expr $a + $b
+;-;*;/;%;=
- 條件表達(dá)式==和!=要放在方括號之內(nèi)奥邮,并且要有空格
[ $a == $b ]
#!/bin/bash
a=2
b=3
c=`expr $a + $b`
echo $c
exit 0
這段代碼的輸出結(jié)果是:5 万牺。注意使用 expr 命令的那一行,使用的是反引號 `` 洽腺,反引號中的內(nèi)容會(huì)被優(yōu)先執(zhí)行脚粟,所以這一行代碼的作用是將 expr b 這一表達(dá)式的執(zhí)行結(jié)果賦給變量 c 。
- 使用 ((b))```
關(guān)系運(yùn)算符
- -eq equal 是否相等
- -ne not equal 是否不等
- -gt greater than 左邊是否大于右邊
- -lt less than
- -ge greater equal 左邊是否大于等于右邊
- -le less equal 左邊是否小于等于右邊
布爾運(yùn)算符
- ! 非
- -o 或
- -a 與
字符串運(yùn)算符
- = 兩字符串是否相等
- != 兩字符串是否不等
- -z 字符串長度是否為0
- -n 字符串長度是否不為0蘸朋,不為0返回true
- str 檢測字符串是否為空核无,不為空返回true
[$a]
返回true
文件測試運(yùn)算符
- -b file 文件是否為塊設(shè)備文件
- -c file 文件是否是字符設(shè)備文件
- -d file 文件是否是目錄
- -f file 文件是否是普通文件(不是設(shè)備文件或者目錄文件)
- -g file 文件是否設(shè)置了SGID位(Set User ID, SGID 是 Set Group ID的意思。運(yùn)行者將具有文件所有組的權(quán)限藕坯。)
- -u file 文件是否設(shè)置了SUID位(SUID讓本來沒有相應(yīng)權(quán)限的用戶運(yùn)行這個(gè)程序時(shí)团南,可以訪問他沒有權(quán)限訪問的資源噪沙。文件的該位被設(shè)置為1,在該文件被執(zhí)行時(shí)已慢,該文件將以所有者的身份運(yùn)行曲聂,也就是說無論誰來執(zhí)行這個(gè)文件霹购,他都有文件所有者的特權(quán)佑惠,如果所有者是root的話,那么執(zhí)行人就有超級用戶的特權(quán)了齐疙,這是該位將變成一個(gè)安全漏洞膜楷,因此不要輕易設(shè)置該位。)
- -k file 文件是否設(shè)置了粘著位(Sticky Bit)
- -p file 文件是否是具名管道
- -r file 文件是否可讀
- -w file 文件是否可寫
- -x file 文件是否可執(zhí)行
- -s file 文件是否為空
- -e file 文件(包括目錄)是否存在
文件包含
- shall中包含腳本
. filename
(.和文件名中間有一個(gè)空格)或者source filename