Linux?shell之for?in的使用及說明
一、語法
for 變量名 in 列表
do
程序段(command)
done注意1:是變量名而不是$變量!
注意2:列表可以做文章!
二、應用
第一類:數(shù)字性循環(huán)-->seq在in后面的應用
#!/bin/bash
#也是產生等差數(shù)列-->默認是1
for i in $(seq 1 10) #產生的是一個字符串,默認IFS是以空格隔開!
do
echo $(expr $i \* 3 + 1); #主要是復習:expr乘法的特殊用法!-->空格隔開
done 補充:產生[1,10]的自然數(shù)-->{}在in后面的應用
total=0 #全局變量
for i in {1..100} #".."表示連續(xù),默認也是IFS為空格隔開
do
((total+=i))
done
echo -e "total is:${total}"
#多行注釋
<<COMMENR
for i in mysql_{0,1,4,12}sql #多個文件
do
echo $i
samtools view -c $i
done
COMMENT第二類:字符性循環(huán)
最原始的
#!/bin/bash
#使用列表for循環(huán)顯示周一到周日對應的英文-->學習日期的英文
for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo "$day"
done變量的類型
#!/bin/bash
list="Linux Java C++ Python"
for i in $list
do
echo -e "Language is ${i}"
done cat在in后面的應用-->逐行讀取文件的內容(默認是IFS),所以不是逐行打??!
#!/bin/bash for i in $(cat 日志顏色.sh) #注意:pwd當前目錄下的文件 do echo $i done
思考:如果想逐行原樣輸出!
#!/bin/bash
# reading content from a file
file="日志文件.sh"
#將這個語句加入到腳本中,告訴bash shell在數(shù)據值中忽略空格和制表,使其只能識別換行符!
IFS=$'\n'
for std in $(cat $file)
do
echo "$std"
done說明:IFS的一些說明!
- bash shell會將下列字符當作字段分隔符:空格、制表符、換行符
- 說明:如果在shell在數(shù)據中看到這些字符中的任意一個,它就會假定這表明了列表中一個新數(shù)據字段的開始!
參考的最佳安全實踐:在改變IFS之前保存原來的IFS值,之后再恢復它。
保證了:在腳本的后續(xù)操作中使用的是IFS的默認值
實現(xiàn):
IFS.OLD=$IFS #默認的IFS的數(shù)值-->也是環(huán)境變量! IFS=$'\n' #自定義的IFS數(shù)值 <在代碼中使用新的IFS值> #待使用自定義IFS的部分! IFS=$IFS.OLD #恢復默認的IFS
第三類:路徑查找
ls在in后面的命令是-->讀取當前pwd下的文件(廣義上)!
#!/bin/bash
for i in `ls`; #ls可以結合統(tǒng)配符應用!
do
echo $i is file name\! ; #注意:\的應用!
done 用通配符讀取目錄(無命令)
for file in ~/*; #一級目錄下的內容-->并不遞歸顯示!
do
echo $file is file path \! ; #${file}代表的是文件的全路徑
done #!/bin/bash
#回憶1:統(tǒng)計腳本參數(shù)的個數(shù)
echo "argument number are $#"!
#回憶2:參數(shù)的內容-->此處可以換成$@來測試!
echo "the input is $*"
#循環(huán)執(zhí)行
for argument in "$*";
do
echo "$argument "
doneIFS:內部字段分隔符
需求如下:
#遍歷一個文件中用冒號分隔的值:-->特殊文件-->/etc/passwd文件等! IFS=: #如果要指定多個IFS字符,只要將它們在賦值行串起來就行。 IFS=$'\n':;"
總結
#(1)從變量讀取列表 # 將一系列的值都集中存儲在一個變量中,然后需要遍歷變量中的整個列表 #(2)從命令讀取值 #有兩種方式可以將命令輸出賦值給變量: # (1)反引號字符(`) # (2)$()格式
補充:在列表構成上分多種情景,如數(shù)字列表、字符串列表、命令列表、腳本傳參列表等!
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Shell 命令啟動Docker Container的實現(xiàn)
本文主要介紹了Shell 命令啟動Docker Container的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
使用Bash Shell對目錄中的文件實現(xiàn)遞歸式拷貝
這篇文章主要介紹了使用Bash Shell對目錄中的文件實現(xiàn)遞歸式拷貝,適用于Ubuntu等Debian系的Linux系統(tǒng),需要的朋友可以參考下2015-07-07

