一、bash指令碼執行的控制語句:
1、順序執行:預設,逐條執行各語句。
2、選擇執行if:分支,條件判斷,執行符合條件的分支。
(2)、雙分支
fi
(3)、多分支:
(4)例1:寫乙個指令碼,實現如下功能:
1、讓使用者通過鍵盤輸入乙個使用者名稱
2、如果使用者存在,就顯示其使用者名稱和uid
3、否則,就顯示使用者不存在。
#!/bin/bash
read -t 10 -p "enter a username:" username
if id $username $> /dev/null;then
else
fi例2:寫乙個指令碼,實現如下功能:
1、讓使用者通過鍵盤輸入乙個使用者名稱,如果使用者不存在就退出
2、如果使用者的uid大於等於500,就說明是普通使用者
3、否則,就說明是管理員或者系統使用者。
#!/bin/bash
read -t 10 -p "enter a username" username
if ! id $username $> /dev/null;then
echo "$username not exist."
exit 6
fiuserid=`id -u $username`
if [ $userid -ge 500 ];then
echo "a common user."
else
echo "admin or system user."
fi例3:寫乙個指令碼,實現如下功能:
1、讓使用者通過鍵盤輸入乙個使用者名稱,如果使用者不存在就退出
2、如果使用者的uid等於gid,就說它是「good guy」
3、否則,就說它是「bad guy」
#!/bin/bash
read -t 10 -p "enter a username" username
if ! id $username $> /dev/null;then
echo "$username not exist."
exit 6
fiif [ `id -u $username` -eq `id -g $username` ];then
echo "good guy."
else
echo "bad guy."
fi3、迴圈執行:將同一段**反覆執行有限次。
(1)、for:實現知道迴圈次數,
(2)列表的生成方法:
例3:寫乙個指令碼,用file命令顯示/var/log目錄下的每個檔案的內容型別
#!/bin/bash
dirname=/var/log
for filename in $dirname/*
例4:寫乙個指令碼,要求如下
a、建立/tmp/scripttest目錄,用變數名儲存目錄名
b、在目錄裡建立測試檔案tfile1-tfile20
c、建立使用者testuser1和testuser2
d、將tfile1-tfile10的屬主和屬組改為testuser1
e、將tfile11-tfile20的屬主和屬組改為testuser2
#!/bin/bash
dirname=/tmp/scripttest
mkdir $dirname
for fileno in
dotouch $dirname/tfile$fileno
done
useradd testuser1
useradd testuser2
for fileno in
dochown testuser1:testuser1 $dirname/tfile$fileno
done
for fileno in
dochown testuser2:testuser2 #dirname/file$fileno
done
或者#!/bin/bash
dirname=/tmp/scripttest
mkdir $dirname
useradd testuser1
useradd testuser2
for fileno in
dotouch $dirname/tfile$fileno
chown testuser1:testuser1 $dirname/tfile$fileno
done
for fileno in
dotouch $dirname/tfile$fileno
chown testuser2:testuser2 $dirname/tfile$fileno
done
例5:用for寫乙個指令碼,要求如下:
1、顯示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行
2、輸出格式為:/etc/init.d/functions: 行數 lines.
/etc/rc.d/rc.sysinit: 行數 lines.
/etc/fstab: 行數 lines.
#!/bin/bash
for filename in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab
dolinecount=`wc -l $filename|cut -d' ' -f1`
echo "$filename :$linecount lines"
done
例6:顯示/etd/passwd中的第3、7和11行中的使用者名稱和id號
#!/bin/bash
for lineno in 3 7 11
dohead -n #lineno|tail -1|cut -d: -f1,3
done
例7:判斷當前系統上的所有使用者是good guy還是bad guy,條件如下:
1、如果使用者的uid等於gid,就說它是「good guy」
2、否則,就說它是「bad guy」
#!/bin/bash
for username in `cut -d :-f1 /etc/passwd`; do
done
例8:求200內所有3的整數倍的正整數的和
(3)、while:條件滿足則迴圈,否則退出。
while 條件測試;do
迴圈體;
done
例如:求100以內所有正整數的和。
declare -i sum=0;i=1
while [ $i -le 100 ];do
let sum+=$i
let i++
done
echo $sum
(4)、until:條件不滿足則迴圈,否則退出。看以看出它與while相反。
until 測試條件;do
迴圈體
done
二、檢查bash指令碼語法命令:bash -n 指令碼檔案
三、執行指令碼:bash 指令碼檔案,無需修改檔案的執行許可權
shell 中常用的控制語句及指令碼執行控制
for num in 1 2 3 for num in for num in seq 1 3 或者 for num in seq 1 2 10 dodone while 條件 dodone ifthen elif then else ficase word1 action1 word2 action...
沒有 的bash指令碼的執行
有些bash指令碼寫的不規範,沒有在檔案開頭寫 但是卻能直接執行,可是如果看核心 shell指令碼的載入函式中的開頭就會判斷,如果沒有 的話就會返回錯誤 static int load script struct linux binprm bprm,struct pt regs regs 為何在li...
流程控制語句(bash)
1.if控制語句 if then fi if then else fi if then elif then elif then else fi if 條件表示式 then 命令序列 滿足條件才執行 注意,如果if與then elif與then 寫在同一行,要用 隔開 fiif 條件表示式 then ...