一、if elif 判断
二、逻辑与逻辑或
三、for循环(名字表循环)
四、select循环
五、case语句
六、while循环
七、总结:
语法格式为:
eg :对以上的一个简单应用。
#!/bin/sh
# if test then... elif test then... else... fi
if [ -d $1 ] #其中[]替换了test,判断占位($1)的需要输入的文件是否是目录。
then
echo "is a directory!"
elif [ -f $1 ]
then
echo "is a file!"
else
echo "error!"
fi
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo7.sh /home/love
is a directory!
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo7.sh /home/love/shelldir/demo1.sh
is a file!
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$
我们使用-a和-o表示逻辑与和逻辑或。eg :对其的一个简单应用。
#!/bin/sh
#逻辑与 -a(and) ,逻辑或-o(or)
if [ $1 -eq $2 -a $1 = 1 ] #注意空格,$1和$2相当于占位符。表示第一个参数和第二个参数相等(equal),并且第一个值为1的话。
then
echo "param1 == param2 and param1 = 1"
elif [ $1 -ne $2 -o $1 = 2 ] #注意空格,第一个参数和第二个参数不相等,not equal,
then
echo "param1 != param2 or parm1 = 2"
else
echo "others"
fi
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 1 1
param1 == param2 and param1 = 1
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 1 2
param1 != param2 or parm1 = 2
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 3 4
param1 != param2 or parm1 = 2
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 3 3
others
和传统的for循环不太一样。变量表循环,用的不太多。
for... done语句格式:
eg:打印出1-10
#/bin/sh
#for var in [params] do ... done
for var in 1 2 3 4 5 6 7 8 9 10 #这种for循环,要都写出来,不怎么常用。
do
echo "number is $var"
done
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo9.sh
number is 1
number is 2
number is 3
number is 4
number is 5
number is 6
number is 7
number is 8
number is 9
number is 10
格式:select 变量 in 列表
eg:简单应用:具体过程我想通过这个例子表达出来,特别的简单。教程中的程序是这样的呢:
#!/bin/sh
# select var in [params] do ... done
select var in "java" "c++" "python" "linux" "php" "c#" "ruby"
do
break
done
echo "you selected $var"
结果脚本执行的时候出错了,教程中可以执行。显示错误信息如下。
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo10.sh
demo10.sh: 3: demo10.sh: select: not found
demo10.sh: 4: demo10.sh: Syntax error: "do" unexpected
通过网上查阅资料,修改为如下,第一行命令中的sh改为bash
#!/bin/bash
# select var in [params] do ... done
select var in "java" "c++" "python" "linux" "php" "c#" "ruby"
do
break
done
echo "you selected $var"
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ bash demo10.sh
1) java
2) c++
3) python
4) linux
5) php
6) c#
7) ruby
#? 3
you selected python
最后一行的命令也是case,倒着顺序写的。eg:下面一个简单的应用
#!/bin/sh
echo "请从键盘输入一个变量:"
read op #从外面读取一个变量,(键盘)
case $op in
a)
echo "you selected a";;
b)
echo "you selected b";;
c)
echo "you selected c";;
*)
esac
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh
请从键盘输入一个变量:
a
you selected a
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh
请从键盘输入一个变量:
b
you selected b
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh
请从键盘输入一个变量:
1
error
while语句,格式:
注意:shell中大于,大于等于,小于等于,lt,gt ,ne,ge,le 很对应。应对方法:
大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)
不相等 -ne (not equal)
eg:实现从1加到100,
#!/bin/sh
#while test do ... done
num=1 #声明了2个变量,num,sum
sum=0
while [ $sum -le 100 ] #注意空格,-le表示小于等于
do
sum=`expr $sum + $num` #把右边运算符的结果赋值给左边。expr命令对整数运算
num=`expr $num + 1` ##把右边运算符的结果赋值给左边。
done
echo $sum
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo12.sh
5050
如果想让程序执行的慢一点的话,可以改成如下:在done下面一行加一个sleep 10 等待5秒。
#!/bin/sh
#while test do ... done
num=1 #声明了2个变量,num,sum
sum=0
while [ $sum -le 100 ] #注意空格,-le表示小于等于
do
sum=`expr $sum + $num` #把右边运算符的结果赋值给左边。expr命令对整数运算
num=`expr $num + 1` ##把右边运算符的结果赋值给左边。
done
sleep 10
echo $sum
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo12.sh
5050
eg:通过加上break,continue条件的例子,这里的continue和break关键字和其他语言java,c++,python中表达的意思都是一样的,知识每一门语言的语法格式可能有些不相同。
#!/bin/sh
i=0 #生成一个变量i=0
while [ $i -le 100 ] #循环i<=100,$为取出i的值,注意空格,容易出错。
do
i=`expr $i + 1` #等号右边的运算i加加,赋值给i.注意空格,容易出错
if [ $i -eq 5 -o $i -eq 10 ] #判断i等于5,或者i等于10,退出本次循环,注意空格,容易出错。
then continue;
else #否则i不等于5,i不等于10,输出当前i的值是多少。
echo "this number is $i"
fi
if [ $i -eq 15 ] #如果i的值为15,跳出所有循环。 注意空格,容易出错。
then break;
fi
done
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo13.sh
this number is 1
this number is 2
this number is 3
this number is 4
this number is 6
this number is 7
this number is 8
this number is 9
this number is 11
this number is 12
this number is 13
this number is 14
this number is 15
所有程序源码都是手敲出来,有需要可以@我,一起学习。
记录到这里shell编程基本的语法已经大致说完,我本人的理解就是任何一门语言的终极思想都是一样的,其中包括各种程序的设计逻辑,只是每一门语言的语法格式有些差别,要想多熟悉一门语言还需要平时自己多动手,多实践,熟能生巧。
还有一个我认为最重要的就是:一定有一门自己特别特别熟悉的语言,有了这样思想概念之后,再学习任何一门语言都是非常有帮助的,讲到这里就结束了,其中肯定会有很多的不足,希望众师友能给予指出,共同进步。