shell編程for
『壹』 Shell腳本中使用變數作為for循環范圍
我們知道在shell腳本中,可以通過 {x..y} 這樣的表達式來表示一個從x到y的數列
這個用法在shell腳本里叫做 Brace Expansion 。
因此我們常利用這個表達式來作為循環的次數,如:
可以得到從1到10的輸出結果。
但是如果我們想輸出從1到一個變數的結果,這個變數從其他地方獲取:
得到的結果卻是
放棄使用 {x..y} 這樣的表達式:
seq 命令的原理就不說了,這里說說為什麼不能在 { } 中使用變數。其實原因寫在bash的man手冊中:
Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It is strictly textual. Bash does not apply any syntactic interpretation to the context of the expansion or the text between the braces.
大意是說,Bash中會最先展開 { } 中的內容,這個時候 $NUM 還不會被具體的值替代,所以是 i 在循環中讀取的是 『{1..$NUM}』 的一個完整的字元串,輸出時 $NUM 會被10替代,就有了 '{1..10}' 這樣的結果。
關於Bash中的展開 (expansion) 順序,其實有不少值得注意的地方,一不留神可能就會踩坑,還是老前輩那句:腳本猛於虎。
『貳』 shell裡面的for循環
關於shell中的for循環用法很多,一直想總結一下,今天網上看到上一篇關於for循環用法的總
結,感覺很全面,所以就轉過來研究研究,嘿嘿...
1、 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
2、在shell中常用的是 for i in $(seq 10)
3、for i in `ls`
4、for i in ${arr[@]}
5、for i in $* ; do
6、for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
7、for i in f1 f2 f3 ;do
8、for i in *.txt
9、for i in $(ls *.txt)
for in語句與` `和$( )合用,利用` `或$( )的將多行合為一行的缺陷,實際是合為一個字元串
數組
============ -_- ==============for num in $(seq 1 100)
10、LIST="rootfs usr data data2"
for d in $LIST; do
用for in語句自動對字元串按空格遍歷的特性,對多個目錄遍歷
11、for i in {1..10}
12、for i in stringchar {1..10}
13、awk 'BEGIN{for(i=1; i<=10; i++) print i}'
注意:AWK中的for循環寫法和C語言一樣的
===============================================================
01.#/bin/bash
02.# author: 周海漢
03.# date :2010.3.25
04.# blog.csdn.net/ablo_zhou
05.arr=("a" "b" "c")
06.echo "arr is (${arr[@]})"
07.echo "item in array:"
08.for i in ${arr[@]}
09.do
10. echo "$i"
11.done
12.echo "參數,\$*表示腳本輸入的所有參數:"
13.for i in $* ; do
14.echo $i
15.done
16.echo
17.echo '處理文件 /proc/sys/net/ipv4/conf/*/accept_redirects:'
18.for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
19.echo $File
20.done
21.echo "直接指定循環內容"
22.for i in f1 f2 f3 ;do
23.echo $i
24.done
25.echo
26.echo "C 語法for 循環:"
27.for (( i=0; i<10; i++)); do
28.echo $i
29.done
-----------------------------------------------------------------------------------
----------------------
shell中for循環用法
shell語法好麻煩的,一個循環都弄了一會 ,找了幾個不同的方法來實現輸出1-100間可以被3
整除的數
1.用(())
#!/bin/bash
clear
for((i=1;i<100;i++))
for
do
if((i%3==0))
then
echo $i
continue
fi
done
2.使用`seq 100`
#!/bin/bash
clear
for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
3.使用while
#!/bin/bash
clear
i=1
while(($i<100))
do
if(($i%3==0))
then
echo $i
fi
i=$(($i+1))
done
-----------------------------------------------------------------------------------
---------------------
在shell用for循環做數字遞增的時候發現問題,特列出shell下for循環的幾種方法:
1.
for i in `seq 1 1000000`;do
echo $i
done
用seq 1 10000000做遞增,之前用這種方法的時候沒遇到問題,因為之前的i根本就沒用到百萬
(1000000),因為項目需要我這個數字遠大於百萬,發現用seq 數值到 1000000時轉換為1e+06,根
本無法作為數字進行其他運算,或者將$i有效、正確的取用,遂求其他方法解決,如下
2.
for((i=1;i<10000000;i++));do
echo $i
done
3.
i=1
while(($i<10000000));do
echo $i
i=`expr $i + 1`
done
因為本方法調用expr故運行速度會比第1,第2種慢不少不過可稍作改進,將i=`expr $i + 1`改
為i=$(($i+1))即可稍作速度的提升,不過具體得看相應shell環境是否支持
4.
for i in {1..10000000;do
echo $i
done
其實選用哪種方法具體還是得由相應的shell環境的支持,達到預期的效果,再考慮速度方面的
問題。
『叄』 shell腳本怎麼寫for循環
for
I
in
list;
do
statement
done
I
是變數
list是一個表格
如你可以使用一串用括弧括起來的數,
也可以使用
命令替換
`seq
1
15`
這個命令忘記了,,
有可能是
`seq
15`
[1..15]
表示1-15的數,,
statement
即要執行的語句
for
I
in
[1..10];
do
echo
$I
done
這段for循環的含義就是顯示從1~10的所有數字