1. 程式人生 > >shell循環

shell循環

所有 以及 tfs 依次 char 字符 path data while循環

以下內容都是網上知識,只用於個人復習。

一、數字循環
例子: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循環