---來源於網絡整理
0、前言
1)shell 語句中寫在一行中,各命令之間需要用分號隔開;------適用於在終端中直接執行命令;
shell語句中按照縮進寫多行,段落清晰,不需加分號;-------適用於寫在腳本文件中;
2)執行腳本文件的方法,當不添加腳本的可執行權限的時候,用點命令執行腳本最簡單;
當添加文件的可執行權限時,./腳本執行;
第一行加#!/bin/sh的時候,是執行腳本解析器;
第一行沒加#!/bin/ 的時候,會採用默認腳本解析器;通過echo $SHELL 命令查看。
3)echo 可以打印輸出,printf也可以打印輸出
echo "\n" 會將\n打印輸出;
printf"\n"會換行。
echo默認會輸出換行的。printf 默認不會輸出換行。
1、條件結構
共有5個關鍵字 : if then elif else fi
示例1:
if [ -d Desktop ] ; then ----------->有分號作爲結尾 ,如果then換行寫,則;可以省略
echo " this is dir"
elif [ -f Desktop ] ; then
echo "this is file"
else
printf “unkown\n”
fi
示例2:
if :; then echo "always true" fi ------>冒號表示總爲真。
示例3:
echo " is it sunday? please answer yes or no"
read YES_OR_NO ---------------->read 相當於scanf, 等待用戶輸入,此變量不需要單獨初始化
if [ "$YES_OR_NO" = "yes" ] ;then ---------------->分號是因爲與then同行,分行的話,不需要分號
echo "hello"
elif [ "$YES_OR_NO" = "no" ] ;then
echo "world"
else
echo "sorry"
exit 1 --------------------->會直接退出終端;改成return 1,則不會退出終端
fi
exit 0 --------------------->會直接退出終端;改成return 0,則不會退出終端
2、case /esac
與c語言中的switch語句的區別:
1)沒有c語言中的 switch關鍵字;
2)使用兩個分號;; 來代替c語言中的break的作用。
示例:
echo "please answer yes or no"
read YSE_OR_NO
case "$YSE_OR_NO" in
yes|y|Y|YES|Yes) ----------------------》只有右括號,表示集合
echo "hello";;
[nN]? )
echo "world";;
*) -------------------------------------->相當與switch 語句中的default
echo "sorry"
return 1;;
esac
return 0
小結:case 中的各種情況使用右半括號寫,跟我們平時用的1) 2) 3) 類似。
3、for循環結構
for/do/done
for循環與C語言中的for不同,shell中的for是循環遍歷,沒有類似C語言中的起始條件,終止條件,等
for FRUIT in apple banana pear ; do ---------加了分號是因爲與do在一行,如果分行的話,就可以去掉分號
echo "this is $FRUIT"
done
小結1:變量FRUIT 循環取 in中的值;do 相當於C語言中for循環的左大括號,done相當於右大括號;
示例1:將當前文件中的chap0、chap1文件名改爲chap0~、chap1~
for FILENAME in chap?;do
mv $FILENAME $FILENAME~
done
******************上述示例等價於下邊的例子。
for FILENAME in `ls chap?`;do
mv $FILENAME $FILENAME~ ------>使用mv命令是修改文件名
done
小結2:for循環中,in 後面的是個集合;
測試:當前目錄中有chap0、chap1、chap2 ,但沒有以apple、banana 、pear開頭的文件,
也就是說 in 後的集合,如果是模糊匹配,會到當前目錄中查找文件名,沒有匹配上會原樣輸出;匹配上會輸出匹配的文件。
4、while循環結構
while do done-------與C語言的while類似,表達式爲真,則執行;
echo "enter password"
read TRY
while [ "$TRY" != "secret" ];do
echo "sorry,try again"
read TRY
done