Shell 學習(三)


Shell 學習(三)

流程控制

1 if判斷

  • 基本語法
if [ 條件判斷式 ];then 
程序
fi

或者

if[ 條件判斷式 ]
	then
		程序
		elif[ 條件判斷式 ]
			then
				程序
fi

注意事項:(1) [ 條件判斷式 ],中括號和條件判斷式之間必須要有空格。(2) 推薦使用第二種方式

  • 應用實例

案例: 編寫一個shell程序,請輸入參數,大於等於60,則輸出“及格了”,如果小於60,則輸出“不及格”

#!/bin/bash
if [ $1 -ge 60 ]
	then 
		echo "及格了"
elif[ $1 -lt 60]
	then
		echo "不及格"
fi

2 case 語句

  • 基本語法

這個case語法很不一樣,我開始很不習慣,有點像C的感覺

case $變量名 in
"值1")
	如果變量的值等於值1,則執行程序1
;;
"值2")
	如果變量的值等於值2,則執行程序2
;;
···省略其他分支···
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac
  • 應用實例

案例:當命令行參數是1時,輸出“周一”,當參數是2時,輸出“周二”,其他情況輸出other。

#!/bin/bash
case $1 in
"1")
	echo "周一"
;;
"2")
	echo "周二"
;;
*)
	echo "other"
;;
esac

3 for循環

  • 基本語法1
for 變量 in 值1 值2 值3 ..
do	
	程序
done

應用實例

打印命令行輸入的參數[會使用到$* 和$@]

#!/bin/bash
#使用$*
for i in "$*"
do
	echo "the num is $i"
done

echo "====="
#使用$@
for j in "$@"
do
	echo "the num is $j"
done

執行后為這樣:

  • 基本語法2

    這個語法就很像java中的for循環

for((初始值;循環控制條件;變量變化))
do
	程序
done

應用實例:從1加到100的值輸出顯示

但是這個很奇怪,前面判斷條件都是用-gt -ge 來着。這里可以直接用<=

#!/bin/bash
#定義一個變量
SUM=0
for((i=0;i<=100;i++))
do
	SUM=$[$SUM+$i]
done
echo "sum=$SUM"

4 while 循環

  • 基本語法
while [ 條件判斷式 ]
do
	程序
done

應用實例

案例:從命令行輸入一個數n,統計從1+...+n 的值是多少

#!/bin/bash
SUM=0
i=0
while [$i -le $1]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "sum=$SUM"

2 read 讀取控制台輸入

2.1 基本語法

read (選項)(參數)
選項:
-p : 指定讀取值時的提示符
-t : 指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了。
參數:
變量:指定讀取參數的變量名

2.2 應用實例

案例一:讀取控制台輸入一個num 值

案例二:讀取控制台輸入一個num值,在10秒內輸入

#!/bin/bash
read -p "請輸入一個數num1="NUM1
echo "你輸入的值是num1=$NUM1"
read -t 10 -p "請輸入一個數num2="NUM2
echo "你輸入的值是num2=$NUM2"

3 函數

3.1 系統函數

  • basename 基本語法
功能:返回完整路徑最后 / 的部分,常用於獲取文件名
basename[pathname][suffix]
basename[string][suffix](功能描述:basename命令會刪掉所有的前綴包括最后一個('/')字符,然后將字符串顯示出來)。
選項:
suffix為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉
  • dirname 基本語法
功能:返回完整路徑最后 / 的前面的部分,常用於返回路徑部分
dirname 文件絕對路徑(功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄部分),然后返回剩下的路徑(目錄的部分))

3.2 應用實例

  • 案例1:請返回 /home/aaa/test.txt 的“test.txt” 部分

  • 案例2:請返回 /home/aaa/test.txt 的/home/aaa

3.3 自定義函數

  • 基本語法
[function] funname[()]
{
	Action;
	[return int;]
}

調用直接寫函數名 : funname[值]

  • 應用實例
  • 案例1:計算輸入兩個參數的和(read),getSum
#!/bin/bash
function getSum(){
	SUM=$[$n1+$n2]
	echo "和是=$SUM"
}
read -p "請輸入第一個數n1" n1
read -p "請輸入第二個數n2" n2

#調用getSum
getSum $n1 $n2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM