shell中的循环结构
for循环结构
1.数字段形式
for i in {1..100} do echo $i done
2.详细列出
for File in 1 2 3 4 5 do echo $File done
3.查找循环
for c_filename in `ls *.c` do echo $c_filename done
5.语句循环
for((i=1;i<100;i++)) do if((i%3= =0)) then echo $i continue fi done
while循环结构
1.#while循环注意为方括号[],且注意空格min=expr $min + 1
相当于min自加1
min=1 max=100 while [ $min -le $max ] do echo $min min=`expr $min + 1` done
补充expr命令 expr命令是一个手工命令行计数器,用空格隔开每个项;用反斜杠 \ 放在 shell 特定的字符前面;对包含空格和其他特殊字符的字符串要用引号括起来 1、计算字串长度 > expr length “this is a test” 14 2、抓取字串 > expr substr “this is a test” 3 5 is is 3、抓取第一个字符数字串出现的位置 > expr index "sarasara" a 2 4、整数运算 > expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义) 90 > expr 30 * 3 expr: Syntax error #双括号形式,内部结构有点像C的语法,注意赋值:i=$(($i+1))
i=1 while(($i<100)) do if(($i%4==0)) then echo $i fi i=$(($i+1)) done
while的do写法可以把do和while放在一行,只需要加个分号;
while(($i<100)); do if(($i%4==0)) then echo $i fi i=$(($i+1)) done
一些细节
echo创建文件和追加文件内容
1.
echo "#inclde<stdio.h> int main(){ return 0;}" > a.c
即可创建一个a.c文件并且向其内容添加""中的内容 2. echo "//创建一个主程序" >> a.c 向a.c文件其内容添加""中的内容,在文件原内容后追加 shell下case语句
case $var in 1) echo"number is 1" ;; 2) echo"number is 1" ;; 3) echo"number is 1" ;; esac
shell下case语句没有break,执行完与case对于所在的语句后就自动跳出case 而shell下的break语句用在while循环下有用
shell程序的传参
使用$# $0 $1 $2
3..
其
中
3.. 其中
3..其中#表示传参的个数$1 $2 $3表示第一、第二、第三个参
数
传参对比
C语言:./a.out a b c
//argc=4,argv[0]=./a.out,argv[1]=a,argv[2]=b,argv[3]=c
shell:./a.out a b c
//$#=3,$0=./a.out,$1=a,$2=b,
3
=
c
在
s
h
e
l
l
下
3=c 在shell下
3=c在shell下#并不是不可变的,shell程序小shift可以使参数左移,此时$#就会-1,$1=b,$2=c