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

