關于shell腳本編程基礎第三篇
本章主要內容:
循環的特殊用法;while;for;select 循環與菜單
特殊用法:
while循環的特殊用法(遍歷文件每一行)
語法:
while read (讀取) (列表);do
循環體
done <
/文件/file
依次讀取導入的文件中的每一行,并且將行賦值給變量列表中
=================================================
命令行舉例:
[root@localhost ~]# while read suru;do
echo $suru;done </etc/issue
S
Kernel r on an m
將/etc/issue中的內容按行讀取到變量列表中
=================================================
shell腳本舉例:
[root@localhost ~]# vim whileUID.sh
#!/bin/bash
#
#user:Compro
#將/etc/passwd
中的所有UID進行相加之和
sum=0
while read line
do
sum=$[sum+`echo $line|cut -d: -f3`]
done < /etc/passwd
echo
$sum
運行結果:
[root@localhost
~]# bash whileUID.sh
85210
調試執行:
[root@localhost ~]#
bash -x whileUID.sh
會顯示出來詳細的執行狀態。
===============================================================================
命令行舉例:
~]# while read -p
"who are you?" suru;do echo $suru;done
循環 直接打印提示
who are you? 調用輸入的內容顯示。死循環
運行結果
who are you?xiaomage
xiaomage
who are you?xmg
xmg
…
就這樣一直循環下去。
=================================================================================
shell腳本練習
[root@localhost
~]# vim whileuserxin.sh
#!/bin/bash
#
#user:Compro
#掃描/etc/passwd恩件每一行,如果發現注釋信息字段為空,則填充用戶名和辦公室號碼。>并提示該用戶的注釋信息已經修改成功
while read line
do
xinxi=$(echo $line | cut -d: -f5)
if [[ -z "$xinxi" ]];then
name=$(echo $line |cut -d: -f1)
chfn -f $name $name &> /dev/null
chfn -p 38763415 $name &> /dev/null
echo "$name xinxi modify complete "
fi
done <
/etc/passwd
#用法:
chfn [選項] [用戶名]
選項:
-f, –full-name
<全名> 真實姓名
-o, –office
<辦公> 辦公號碼
-p, –office-phone
<電話> 辦公電話
-h, –home-phone <電話>
住宅電話
=================================================================================
特殊用法(())
雙小括號方法,就是((…))格式,也可以用于算數運算
(( … )): (( 表達式 ))
估值算術表達式。
表達式按照算術法則進行估值。
等價于 "let 表達式".
退出狀態
如果表達式估值為0則返回 1;否則返回0。
例如:~]# i=10;((i++));echo $i
~]# i=10;let i++;echo $i
雙小括號方法也可以使用bash shell實現C語言風格的變量操作
for循環的特殊格式:
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
do
循環體
done
控制變量初始化:僅在運行到循環代碼段時執行一次
控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后在做條件判斷
=================================================================================
簡單shell腳本舉例:
for
((i=1;i<10;i++)) 定義變量=1 然后判斷i是否小于10;如果不小于10,就執行打印變量值;
do
然后遞增運算i++在前面的基礎上加1,循環到條件為假時,退出循環,
echo
$i 如果條件到達9的時候就會終止,條件是i小于10,你能超過10
done 循環結束退出
=================================================================================
shell腳本練習
[root@localhost
~]# vim for992.sh
#!/bin/bash
#
#user:Compro
for (( i=1 ; i<=9 ; i++ )) 這個就不解釋了
看上面的解釋就行了;
do
for (( j=1 ; j<=i ; j++)) 嵌套for循環,定義運算變量值,j=1 j小于等于$i的值,
然后在j的值基礎之上進行遞增運算。
do
當循環到小于等于i的時候就停止了,也就是說i是9行,j在9行的基礎上,每一行進行對應打印,比如1行打印1次,2行打印2次,以此類推;直到循環結束
echo -ne "$i*$j=$(($i*$j))\t"
done
$i的值*$j的值(1*1;2*1;2*2)= 拿$i的值和$j的值進行乘法運算的結果
echo 例如1*1=1 ;2*1=2;2*2=4 然后每一個結果之后加上\t空格
done 循環體結束
運行結果:
[root@localhost ~]#
bash for992.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
=================================================================================
select 循環與菜單
select: NAME [in 詞語 … ;] do 命令; done
從列表中選取詞并且執行命令。
select
循環主要用于創建菜單,按數字順序排列的菜單選項,將顯示在標準錯誤上,并顯示PS3提示符,等待用戶輸入
用戶輸入菜單列表中的某個數字 ,執行相應的命令,
語法:
select 變量 in 列表
do
循環體命令
done
命令行舉例:
~]# select caidan in
kr gbjd lm;do echo "you is $caidan";done
無限循環命令
變量名 列表1,2,3來表示位置 ;提示輸入變量的值;結束
~]# select cmd in
ls pwd hostname exit;do $cmd;done
可以定義變量名, 列表內是命令
對應的輸如數字就可以執行相應的命令結果
=================================================================================
shell腳本舉例:
PS3="提示符內容"
[root@localhost
~]# vim selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循環創建菜單變量
PS3="請輸入:"
a=拍黃瓜
b=韭菜雞蛋
c=蘭州拉面
select caidan in $a $b $c
do
case $caidan in
$a)
echo "price is 66 Dollar"
;;
$b)
echo "price is 69 Dollar"
;;
$c)
echo "price is 99 Dollar"
;;
*)
echo "you choose is false"
break
;;
esac
done
=================================================================================
執行shell腳本:
~]# bash selectcaidan.sh
1) 拍黃瓜
2) 韭菜雞蛋
3) 蘭州拉面
請輸入:1
price is 66 Dollar
請輸入:2
price is 69 Dollar
請輸入:3
price is 99 Dollar
請輸入:4
you choose is false
=================================================================================
用戶輸入被保存在內置變量
REPLY(回復) 中 ;會提示用戶輸入的是什么字符
[root@localhost ~]# vim
selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循環創建菜單變量
PS3="請輸入:"
a=拍黃瓜
b=韭菜雞蛋
c=蘭州拉面
select caidan in $a $b $c
do
case $caidan in
$a)
echo "price is 66 Dollar"
echo "you
input is $REPLY" 你輸入的是$
;;
$b)
echo "price is 69 Dollar"
echo "you
input is $REPLY"
;;
$c)
echo "price is 99 Dollar"
echo "you
input is $REPLY"
;;
*)
echo "you choose is false"
echo "you
input is $REPLY"
break 退出當前的整個循環。
;;
esac
done
select
是個無限循環,因此要記住用break命令退出循環,或用exit命令終止腳本。也可以按Ctrl+c退出本次循環
注意:退出循環,和終止腳本是兩個概念。
select經常和case聯合使用
,與for循環類似,可以省略in后面的變量列表,此時可以使用位置變量
原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/37822
文章對shell語句的語法總結的很好,這道華麗的分割線也是很6,可以嘗試著用markdown來寫,這樣會讓整個文章看起來好看多了。