shell里面的for循環
關于shell中的for循環用法很多,一直想總結一下,今天網上看到上一篇關于for循環用法的總結,感覺很全面,所以就轉過來研究研究,嘿嘿。
1、 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done2、在shell中常用的是 for i in $(seq 10)3、for i in `ls`4、for i in ${arr[@]} 5、for i in $* ; do6、for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do7、for i in f1 f2 f3 ;do8、for i in *.txt9、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/bash02.# author: 周海漢03.# date :2010.3.2504.# **ablo_*=("a" "b" "c")* "arr is (${arr[@]})"* "item in array:"* i in ${arr[@]}*10. echo "$i"* "參數,\$*表示腳本輸入的所有參數:"* i in $* ; * $* '處理文件 /proc/sys/net/ipv4/conf/*/accept_redirects:'* File in /proc/sys/net/ipv4/conf/*/accept_redirects; * $* "直接指定循環內容"* i in f1 f2 f3 ;* $* "C 語法for 循環:"* (( i=0; i<10; i++)); * $*---------------------------------------------------------------------------------------------------------shell中for循環用法shell語法好麻煩的,一個循環都弄了一會 ,找了幾個不同的方法來實現輸出1-100間可以被3整除的數1.用(())#!/bin/bashclearfor((i=1;i<100;i++))fordoif((i%3==0))thenecho $icontinuefidone2.使用`seq 100`#!/bin/bashclearfor i in `seq 100`doif((i%3==0))thenecho $icontinuefidone3.使用while#!/bin/bashcleari=1while(($i<100))doif(($i%3==0))thenecho $ifii=$(($i+1))done--------------------------------------------------------------------------------------------------------在shell用for循環做數字遞增的時候發現問題,特列出shell下for循環的幾種方法:* i in `seq 1 1000000`;doecho $idone用seq 1 10000000做遞增,之前用這種方法的時候沒遇到問題,因為之前的i根本就沒用到百萬(1000000),因為項目需要我這個數字遠大于百萬,發現用seq 數值到 1000000時轉換為1e+06,根本無法作為數字進行其他運算,或者將$i有效、正確的取用,遂求其他方法解決,如下*((i=1;i<10000000;i++));doecho $idone3.i=1while(($i<10000000));doecho $ii=`expr $i + 1`done因為本方法調用expr故運行速度會比第1,第2種慢不少不過可稍作改進,將i=`expr $i + 1`改為i=$(($i+1))即可稍作速度的提升,不過具體得看相應shell環境是否支持* i in {1..10000000;doecho $idone其實選用哪種方法具體還是得由相應的shell環境的支持,達到預期的效果,再考慮速度方面的問題。
shell語言 循環語句怎么寫
echo –n “input:”
read user
if 多條指令,這些命令之間相當于“and”(與)
grep $user /etc/passwd >/tmp/null
who -u | grep $user then 上邊的指令都執行成功,返回值$?為0,0為真,運行then
echo "$user has logged"
else 指令執行失敗,$?為1,運行else
echo "$user has not logged"
fi
shell里的for循環怎么寫
for循環的運作方式,是講串行的元素意義取出,依序放入指定的變量中,然后重復執行含括的命令區域(在do和done 之間),直到所有元素取盡為止。
其中,串行是一些字符串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字符串稱為字段。for的語法結構如下:1234for 變量 in 串行do 執行命令done說明: 行1,講串行中的字段迭代放入變量中 行2-4,接著將重復執行do和done之間的命令區域,直到串行中每一個字段軍處理過為止。
流程圖:用例1 用for循環在家目錄下創建aaa1-aaa10,然后在aaa1-aaa10創建bbb1-bbb10的目錄123456789101112#!/bin/bashfor k in $( seq 1 10 )do mkdir /home/kuangl/aaa${k} cd /home/kuangl/aaa${k} for l in $( seq 1 10 ) do mkdir bbb${l} cd /home/kuangl/aaa${k} done cd ..done說明: 行2,seq 用于產生從某個數到另外一個數之間的所有整數。 行4,在家目錄下創建文件夾。
行6,在使用一個for循環創建文件夾測試結果:12345678910111213141516171819202122232425[root@test01 kuangl]# lltotal 80drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9[root@test01 kuangl]# cd aaa1[root@test01 aaa1]# lltotal 40drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb91用例2 列出var目錄下各子目錄占用磁盤空間的大小。1234567#!/bin/bashDIR="/var"cd $DIRfor k in $(ls $DIR)do [ -d $k ] && du -sh $kdone說明: 行4,對/var目錄中每一個文件,進行for循環處理。
行6,如果/var下的文件是目錄,則使用du -sh計算該目錄占用磁盤空間的大小。測試結果:12345678910111213141516171819202122[root@test01 scripts]# ./*276M cache4.0K cvs84K db8.0K empty4.0K ftp4.0K games4.0K gdm21G lib4.0K local16K lock7.4G log4.0K logs0 mail4.0K nis4.0K opt4.0K preserve336K run3.7G spool212K tmp4.1G www4.0K yp。
關于linux shell 循環語句的問題
#!/bin/bash#獲得輸入的參數 stringline=$1 #長度length=`expr length $stringline`echo "length=$length"#計數器 count_tmp=1 sum=0#依次計算知道結束while [ $count_tmp -le $length ] do tmp=`expr substr $stringline $count_tmp 1`#取子串count_tmp開始的一個字符 echo $tmp count_tmp=$[$count_tmp+1]#遞增 sum=$[$sum+$tmp]#和結果 echo "sum=$sum" done~ 你可以在上面修改,可以有關于輸入的范圍等的容錯。
轉載請注明出處華閱文章網 » shell的循環語句