1.shell的概述
- Linux提供的shell解釋器:
- cent os 默認的解釋器是/bin/bash
2.第一個shell腳本
touch hello.sh
vi hello.sh
echo "hello world"
chmod 777 hello.sh
./hello.sh
sh hello.sh(無需權限)
bash hello.sh(無需權限)
3.變量
3.1普通變量
$HOME、$PWD、$SHELL、$USER等
$ A = 5
echo $A
3.2特殊變量
- $n:n爲數字,$0代表該腳本名稱,$1-9代表第一到第九個參數,十以上的參數,十以上的參數需要用大括號包含,如{10}
- $#:獲取所有輸入參數個數,常用於循環
- ∗:這個變量代表命令行中所有的參數,*把所有的參數看成一個整體
- @:這個變量也代表命令行中所有的參數,不過@把每個參數區分對待
- $?:最後一次執行的命令的返回狀態。如果這個變量的值爲0,證明上一個命令正確執行;如果這個變量的值爲非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。
4.運算符
“$((運算式))”或“$[運算式]”
expr + , - , \*, /, % 加,減,乘,除,取餘
注意:expr運算符間要有空格
expr 2 + 3 //結果5
expr 2+3 //結果2+3
expr `expr 2 + 3` \* 4
S=$[(2+3)*4]
5.條件判斷
[ 25 -ge 20 ]
echo $? //結果0
[ -w helloworld.sh ]
echo $?
0
[ -e /usr/local/kafka ]
echo $?
6.流程控制
6.1if
if [ 條件判斷式 ];then
程序
fi
或者
if [ 條件判斷式 ]
then
程序
elif [ 條件判斷式 ]
then
程序
else
程序
fi
- 注意事項:
(1)[ 條件判斷式 ],中括號和條件判斷式之間必須有空格
(2)if後要有空格
6.2case 語句
case $變量名 in
"值1")
如果變量的值等於值1,則執行程序1
;;
"值2")
如果變量的值等於值2,則執行程序2
;;
…省略其他分支…
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac
- 注意事項:
1)case行尾必須爲單詞“in”,每一個模式匹配必須以右括號“)”結束。
2)雙分號“;;”表示命令序列結束,相當於java中的break。
3)最後的“*)”表示默認模式,相當於java中的default。
7.循環
7.1for
for (( 初始值;循環控制條件;變量變化 ))
do
程序
done
s=0
for((i=0;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
for 變量 in 值1 值2 值3…
do
程序
done
for i in $*
do
echo "我喜歡 $i "
done
7.2while
while [ 條件判斷式 ]
do
程序
done
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
8.系統函數
- basename [string / pathname] [suffix] (功能描述:basename命令會刪掉所有的前綴包括最後一個(‘/’)字符,然後將字符串顯示出來。
選項:
suffix爲後綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉。
basename /use/local/1.txt
1.txxt
basename /use/local/1.txt .txt
1
- dirname基本語法
dirname 文件絕對路徑 (功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然後返回剩下的路徑(目錄的部分))
dirname /usr/local/1.txt
/usr/local