bash指令碼執行的控制語句

2021-09-20 23:31:49 字數 3885 閱讀 1607

一、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 ...