今天呢,我来将这两天学到的Shell语法做以总结。如有问题,欢迎提出!
1.if语句
我们先来看一个if语句的例子,代码以及结果如下:
read val
if [ $val -eq 100 ]
then
echo "hello"
fi
其实shell的if语句和c语言的没有很大的区别,除了写法上有些差别,其他实现思想都是一样的。我们写的这段代码是先读入一个数,如果这个数等于100则输出“hello”。只是我们要注意的是,Shell的if语句是以 fi 结尾的,而且用then替代了c语言中的花括号。
2.:命令
对的,你没有看错, : 确实是一个命令,它的作用呢,主要有两个。
(1)恒等。用到这个符号时可以表示一个条件恒等,不用经过其他判断。下面用个例子来说明一下吧。
if :;then
echo "hello"
fi
就是不论怎么操作,总是恒等的,并且输出"hello"。
(2)可以解决代码段为空的问题,如果不处理的话,可能会出现编译错误。下面也来一个例子说明:
read val
if test $val -eq 100 ;then
echo "hello"
elif [ $val -le 100 ] ;then
echo "world"
else
:
fi
这段代码大家应该也都看得懂,我也就不一一解释了,直接看结果吧。
3.在Shell中&&和||的区别以及他们两个和-a和-o的区别与联系:
在Shell中呢,&&和||是连接两条命令的,而后面两个是连接两个条件的。我们可以看几个例子来具体说明:
echo "enter your admin"
read name
[ "X$name" == "Xadmin" ] && {
echo "hello admin"
}
echo "enter your admin"
read name
[ "X$name" == "Xadmin" ] || {
echo "hello admin"
}
test $val -eq 10 -a "str"=="this is a test"
#test $val -eq 10 && test "str"=="this is a test"
其实上面两个语句在作用上是等价的,但是我们还是可以发现在语句表示上两个还是有区别的。
其实Shell中case语句和c语言中的表示也大致相同,要注意的是呢,Shell中用;;代替了c语言中的break。下来我们还是看个例子。
read op
case $op in
'start' )
echo "hello start"
;;
'stop')
echo "hello stop"
;;
*)
echo "hello default"
;;
esac
实现结果如下图所示:
注意:还有一个可以代替$op的,我们试着用个$1看看是什么结果:
read op
case $1 in
'start' )
echo "hello start"
;;
'stop')
echo "hello stop"
;;
*)
echo "hello default"
;;
esac
5.for循环
在Shell中for循环有两种表示方法,我们一起来看一看。
(1)第一种是和c语言类似的表示方法,用(())表示时,括号中间就可以用类c的语法来表示了。比如下面这个例子:
for ((i=0;i<10;i++))
do
echo $i
done
(2)还有一种表示方法是for...in,我们也来看个实例:
for i in {a..z}
do
echo $i
done
6.while循环:
while循环的Shell版本的和c版本的也没太大区别,所以,不多说,我们来看例子:
i=0
sum=0
while [ $i -le 10 ]
do
let sum+=$i
let i++
done
echo $sum
结果如下图所示:
7.until循环
这个循环也和c语言中没有太大区别,所以我们通过一个实例来看看基本语法。
i=0
until [ $i -gt 5 ]
do
echo $i
let i++
done
echo "done... $i"
实验结果是:
这里需要强调的是,until循环的判断条件比较特别,比如上面的例子就是表示,当i的值小于等于5的时候都进入循环,其他情况则结束。
好了,今天的基本语法就说这些,谢谢大家!