做網(wǎng)站需要域名 域名是啥seo外包網(wǎng)站
1. for命令
下面是bash shell中for命令的基本格式。
for var in list docommands
done
每次for命令遍歷值列表,它都會將列表中的下個值賦給$test
變量。$test
變量可以像for 命令語句中的其他腳本變量一樣使用。在最后一次迭代后,$test
變量的值會在shell腳本的剩余 部分一直保持有效。它會一直保持最后一次迭代的值(除非你修改了它)。
$ cat for_test.sh
#!/bin/bash
for test in Alabama Alaska Arizona Arkansas California
doecho The text next state is $test
done
echo "The last state we visited was $test"
test=hello
echo "Wait, now we're visiting $test"$ bash for_test.sh
The text next state is Alabama
The text next state is Alaska
The text next state is Arizona
The text next state is Arkansas
The text next state is California
The last state we visited was California
Wait, now we're visiting hello
從變量中讀取值
#!/bin/bash 13
# using a variable to hold the list
list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticutfor state in $list
doecho "Have you ever visited $state?"
done
從命令中讀取
$ cat test5
#!/bin/bash
# reading values from a file
file="states"
for state in $(cat $file)
doecho "Visit beautiful $state"
done
更改字段分隔符
特殊的環(huán)境變量IFS
,叫作內(nèi)部字段分隔符(internal field separator)
。IFS
環(huán)境變量定義了bash shell用作字段分隔符的一系列字符。默認情況下,bash shell會將下列字 符當作字段分隔符:
- 空格
- 制表符
- 換行符
可以在shell腳本中臨時更改IFS環(huán)境變量
的值來限制被bash shell當作字段 分隔符的字符。
IFS=$'\n'
用通配符讀取目錄
$ cat test6
#!/bin/bash
for file in /home/rich/test/*
doif [ -d "$file" ]thenecho "$file is a directory"elif [ -f "$file" ]thenecho "$file is a file"fi
done
$ ./test6
/home/rich/test/dir1 is a directory
/home/rich/test/myprog.c is a file
/home/rich/test/myprog is a file
/home/rich/test/myscript is a file
/home/rich/test/newdir is a directory
/home/rich/test/newfile is a file
/home/rich/test/newfile2 is a file
/home/rich/test/testdir is a directory
/home/rich/test/testing is a file
/home/rich/test/testprog is a file
/home/rich/test/testprog.c is a file
1.1 類C語言for語句
C語言風(fēng)格的for命令看起來如下
for (( a = 1; a < 10; a++ ))
注意,有些部分并沒有遵循bash shell標準的for命令:
- 變量賦值可以有空格;
- 條件中的變量不以美元符開頭;
- 迭代過程的算式未用expr命令格式。
以下例子是在bash shell程序中使用C語言風(fēng)格的for命令。
$ cat test8
#!/bin/bash
# testing the C-style for loop
for (( i=1; i <= 10; i++ ))
doecho "The next number is $i"
done
$ ./test8
The next number is 1
The next number is 2
The next number is 3
The next number is 4
The next number is 5
The next number is 6
The next number is 7
The next number is 8
The next number is 9
The next number is 10
$
2. while命令
while命令的格式是:
while testcommand doother commands
done
while命令的關(guān)鍵在于所指定的test command的退出狀態(tài)碼必須隨著循環(huán)中運行的命令而
改變。如果退出狀態(tài)碼不發(fā)生變化, while循環(huán)就將一直不停地進行下去。
最常見的test command的用法是用方括號來檢查循環(huán)命令中用到的shell變量的值。
$ cat test10
#!/bin/bash
# while command test
var1=10
while [ $var1 -gt 0 ]
do
echo $var1var1=$[ $var1 - 1 ]
done
$ ./test10
10
9
8
7
6
5
4
3
2
1
$