当前位置:C++技术网 > 资讯 > Linux下的shell编程基础——流程控制、常用写法

Linux下的shell编程基础——流程控制、常用写法

更新时间:2016-07-29 20:40:58浏览次数:1+次

Linux下的shell和C语言类似,有同样的流程控制。

先来赋值部分:

shell的赋值不需要事先声明,我们可以酱紫:

myVar=10 #注意我的写法,等号两侧不可以有空格!不可有空格!
echo 'myVar = $myVar'
echo 'I have ${myVar}apples" #注意我的写法
#echo 'I have $myVarapples' 这个就是错的,没有我们想要的结果输出

#关于数学运算
myInt=5
myInt2=6
#数学表达式写法好多种
sum=$[$myInt+$myInt2]
sum2=$(($myInt-$myInt2))
let 'sum3=$myInt*$myInt2'
sum4=`expr $myInt / $myInt2` #注意,这个可不是单引号!而是和 ~ 在一个按键上的那个符号!!!千万注意!
#---------------------------------------
echo "$myInt * $myInt2 = $[$myInt *$ myInt2]" #注意我用的是双引号!

然后来if流程:

if [_condition_];then #注意我用  下划线+颜色 代表空格,这个空格不可省!!不像C语言那样任意!

    doSomething

elif [_condition_];then

    doSomething

fi   #注意这个东西,fi代表了finish的意思,必须有,和C语言有区别

注:重要事情说三遍:空格,一定注意空格!

例子:

关于逻辑条件:

[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真 含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在

if ..elif 的那个类似。。。不举例啦。这个东西只是常用,但是下面的while就有讲究啦!

再说while流程和常用法:

先说例子,还是注意那个空格,

代码:

while [_condition_]; do
    ...
done
再来一个常用法,我们很多时候会见到Linux的命令就像这样子:

ls -l
tar -z -c -v -f fileName #tar -zcvf fileName也可以
这个如何实现呢?

案例:

while [ -n "$1" ]; do
    case $1 in
                -h) echo 'you need help';shift 1; #注意是两个分号结尾!这个shift 1表示移除一个参数,此处就是移除匹配到的 -h 参数
                --) echo 'you enterd --';shift 1;; #读者可以自行测试不输入shift 1是啥结果,顺便说一下:ctrl+c是打断循环进程的,你可能需要它
                -*) echo 'you enter others;shift 1;;
    esac
done
结果:


再说for流程:

有一个好消息,那就是shell的for可以像C差不多的for写出来:

#这个有问题,输出会占用10行
for ((i=0;i<10;i++); do
    echo $i
done
然后,经典的用法:

for i in {1..10} #这是两个点,三个点可不对啊!!!
do
   echo $i
done
然后有人会问,这个输出占了十行,我想一行显示怎么办呢?

那就修改代码如下:

for i in {1..10}
do
   s="${s}${i}" #$s表示这个s变量,$i表示当前i值,然后组合起来,放给s,这样子s就会累加,,形成s=1 s=12 s=123的形式
done
echo $s

执行结果如下:

相关资讯