shell循環
阿新 • • 發佈:2018-07-10
所有 以及 tfs 依次 char 字符 path data while循環 以下內容都是網上知識,只用於個人復習。
一、數字循環
例子:1到10依次循環賦值給i,然後i*3再加1。
-----------------------------
一、數字循環
例子:1到10依次循環賦值給i,然後i*3再加1。
-----------------------------
#!/bin/bash for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done
-----------------------------
#!/bin/bash for i in $(seq 1 10) do echo $(expr $i \* 3 + 1); done
-----------------------------
#!/bin/bash for i in {1..10} do echo $(expr $i \* 3 + 1); done
運行結果:
4 7 10 13 16 19 22 25 28 31
例子:循環循環1-10
-----------------------------
#!/bin/bash awk 'BEGIN{for(i=1; i<=10; i++) print i}'
二、字符性循環
例子:將執行命令的結果循環
-----------------------------
#!/bin/bash for i in `ls -l | grep -v "^d" |awk -F" " '{print $NF}' | sed 1d`; do echo $i is file name\! ; done
例子:將傳遞給腳本或函數的所有參數循環
-----------------------------
#!/bin/bash for i in $* ; do echo $i is input chart\! ; done
例子:將f1和f2和f3依次循環
-----------------------------
#!/bin/bash for i in f1 f2 f3 ; do echo $i is appoint ; done
例子:使用變量方式循環
-----------------------------
#!/bin/bash list="rootfs usr data data2" for i in $list; do echo $i is appoint ; done
三、路徑查找
-----------------------------
#!/bin/bash for file in /proc/*; do echo $file is file path \! ; done
-----------------------------
for3-2.sh #!/bin/bash for file in $(ls *.sh) do echo $file is file path \! ; done
四、遍歷文件夾和文件
#!/bin/bash function getdir(){ for element in `ls $1` do dir_or_file=$1"/"$element if [ -d $dir_or_file ] then getdir $dir_or_file else echo $dir_or_file fi done } root_dir="/home/test" getdir $root_dir
#以下命令均不包含".",".."目錄,以及"."開頭的隱藏文件,如需包含,ll 需要加上 -a參數
#當前目錄下文件個數,不包含子目錄
ll |grep "^-"|wc -l
#當前目錄下目錄個數,不包含子目錄
ll |grep "^d"|wc -l
#當前目錄下文件個數,包含子目錄
ll -R|grep "^-"|wc -l
#當前目錄下目錄個數,包含子目錄
ll -R|grep "^d"|wc -l
五、逐行讀取文件裏面每一行內容(如果要對比這幾種方法的速度,可以把他們都寫成函數,然後調用函數的是加time命令)
1、while循環中執行效率最高,最常用的方法。
while read LINE do echo $LINE done < $FILENAME
2、重定向法;
cat $FILENAME | while read LINE do echo $LINE done
3、for循環方法(最快):
for i in `cat $FILENAME` do echo $i done
4、文件描述符法:
exec 3<&0 exec 0<$FILENAME while read LINE do echo $LINE exec 0<&<3
shell循環