歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> bash腳本編程for

bash腳本編程for

日期:2017/3/3 11:14:53   编辑:Linux技術

bash腳本編程:

if語句、bash -n、bash -x

CONDITION:

bash命令:

用命令的執行狀態結果;

成功:true

失敗:flase

成功或失敗的意義:取決於用到的命令;

單分支:

if CONDITION; then

if-true

fi

雙分支:

if CONDITION; then

if-true

else

if-false

fi

多分支:

if CONDITION1; then

if-true

elif CONDITION2; then

if-ture

elif CONDITION3; then

if-ture

...

esle

all-false

fi

逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而後結束;

示例:用戶鍵入文件路徑,腳本來判斷文件類型;

#!/bin/bash

#

read -p "Enter a file path: " filename

if [ -z "$filename" ]; then

echo "Usage: Enter a file path."

exit 2

fi

if [ ! -e $filename ]; then

echo "No such file."

exit 3

fi

if [ -f $filename ]; then

echo "A common file."

elif [ -d $filename ]; then

echo "A directory."

elif [ -L $filename ]; then

echo "A symbolic file."

else

echo "Other type."

fi

注意:if語句可嵌套;

循環:for, while, until

循環體:要執行的代碼;可能要執行n遍;

進入條件:

退出條件:

for循環:

for 變量名 in 列表; do

循環體

done

執行機制:

依次將列表中的元素賦值給“變量名”; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束;

示例:添加10個用戶, user1-user10;密碼同用戶名;

#!/bin/bash

#

if [ ! $UID -eq 0 ]; then

echo "Only root."

exit 1

fi

for i in {1..10}; do

if id user$i &> /dev/null; then

echo "user$i exists."

else

useradd user$i

if [ $? -eq 0 ]; then

echo "user$i" | passwd --stdin user$i &> /dev/null

echo "Add user$i finished."

fi

fi

done

列表生成方式:

(1) 直接給出列表;

(2) 整數列表:

(a) {start..end}

(b) $(seq [start [step]] end)

(3) 返回列表的命令;

$(COMMAND)

(4) glob

(b) 變量引用;

$@, $*

示例:判斷某路徑下所有文件的類型

#!/bin/bash

#

for file in $(ls /var); do

if [ -f /var/$file ]; then

echo "Common file."

elif [ -L /var/$file ]; then

echo "Symbolic file."

elif [ -d /var/$file ]; then

echo "Directory."

else

echo "Other type."

fi

done

示例:

#!/bin/bash

#

declare -i estab=0

declare -i listen=0

declare -i other=0

for state in $( netstat -tan | grep "^tcp\>" | awk '{print $NF}'); do

if [ "$state" == 'ESTABLISHED' ]; then

let estab++

elif [ "$state" == 'LISTEN' ]; then

let listen++

else

let other++

fi

done

echo "ESTABLISHED: $estab"

echo "LISTEN: $listen"

echo "Unkown: $other"

練習1:/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;

分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;

“K34filename stop”

“S66filename start”

練習2:寫一個腳本,使用ping命令探測172.16.250.1-254之間的主機的在線狀態;

本文出自 “梁小明的博客” 博客,請務必保留此出處http://7038006.blog.51cto.com/7028006/1829381

Copyright © Linux教程網 All Rights Reserved