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