shell if 多个条件_【Slog】shell编程基础——流程控制&创建目录结构

【Slog】shell编程基础——流程控制&创建目录结构

个人看来流程控制往往是学习一门语言最重要的部分,因为一旦掌握了流程控制的部分,也就意味着你可以开始写一些真正意义上的小程序了。废话不多说。

Let's Go!

以下为本文的目录结构(非链接跳转)

83b61c91b0652489abeb8136166970a6.png

一、流程控制

在shell编程中,流程控制不可为空。也就意味着,如在if-else中没有else的执行语句,就别写

1.1 if-else

先来看一下语法格式

if condition
then
    command1 
    command2
    ...
    commandN 
fi

可以看见shell中的if-else是使用的if-then的形式,在shell中的if-else是通过状态码来确定是否执行then后边的语句(状态码的知识点看下面的Tips),if后边的命令的退出状态码为0则运行then后边的语句,如果该退出状态码是其他的值,则不会运行then后边的语句。

  • Tips: 在shell中运行的每一个命令都是用退出状态码(exit status)告诉shell它已经运行完毕,退出状态码是一个0~255的整数值,在命令结束运行的时候由命令传给shell。

  • Linux退出状态码(下表)

    状态码描述
    0命令成功结束
    1一般性未知错误
    2不适合的shell命令
    126命令不可执行
    127没找到命令
    128无效的退出参数
    128+x与Linux信号x相关的严重错误
    130通过Ctrl+C终止命令
    255正常范围之外的退出状态码
f3eb494c196362fc8b6d312d6dd00caf.png

同时需要注意的是,末尾还需要fi来作为结尾

1.2 if-elif-else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

需要注意的是,如果有更多的条件。可在后续中继续加入elif

1.3 for循环

形式一
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
形式二
for((assignment;condition:next));do
    command_1;
    command_2;
    commond_..;
done;

注意其中的起始到截至,需要使用do-done

7a730fdb647372b108872b68f6858f96.png

1.4 while语句

其格式为:

while condition
do
    command
done

1.5 无限循环

while
while :
do
    command
done
while true
do
    command
done
for
for (( ; ; ))

1.6 until循环

需要注意的是,until与while不同之处在于,其为执行相应的命令直到为true的时候停止。而while是当条件为true的时候开始执行相应的语句。一般优先使用while。

until condition
do
    command
done

1.7 case

对于这个语法,从事IC行业的同志应该尤为熟悉+亲切。也有一些不同之处,但大体上相仿,不再赘述。

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
53087ec92403c949e89a135602cbb6c6.png
  • Tips :其中的;;为语句终止特殊字符,当该分支下的语句执行完成之后,为终止跳出该case分支

1.8 跳出循环

shell中用以跳出循环的语句,也就是常用的break和continue。只作简单描述

break

break命令允许跳出所有循环(终止执行后面的所有循环)。

continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环

二、创建目录结构

作为ICer在创建一个调试环境的脚本的时候,或者管理多个git项目的时候。创建相应的目录结构来保存不同的数据是很重要的事情。如果波形、log、中间文件等等都需要分类进行保存。

2.1 函数

这里为了更好的完成这个脚本,提一下shell中的函数。后续小节在做详述

[ function ] funname [()]

{

    action;

    [return int;]

}

2.2 创建目录结构脚本

那么接下来,我们就使用shell脚本来创建下图中的文件目录结构

f4aa45caa189c51de740a1719995cfff.png

以下为创建目录结构脚本的代码:

#!/bin/bash

createFolder(){
    if [ -d $1 ]
    then
        echo "the $1 folder exists!!!!"
    else
        mkdir $1
        echo -n `pwd`;echo -n "/$1 ";echo "----> create successful !!!!"
    fi
}

currentPath=`pwd`

proFolder=PRO
dutFolder=PRO/DUT
waveFolder=PRO/WAVE
logFolder=PRO/LOG

createFolder $proFolder
createFolder $dutFolder
createFolder $testFolder
createFolder $waveFolder
createFolder $logFolder
分析:

虽然这个脚本使用了函数,但其并不是这个脚本的关键。使用函数也只不过是减少了没意义的重复性工作而已。其主要使用了本节if-else和上一节(文件测试运算符)的内容。

  • 其中 $1 表示传入函数的第一个参数,上面代码引用函数的时候createFolder $proFolder,其中 $proFolder即为第一个参数。如果该函数中需要第二个参数,则直接定义$2即可。在调用该函数的时候需要在函数名后面跟随两个参数。
  • 判断条件的 -d $1 的含义就是判断有没有 $1 传递进来的 file是否存在并且是一个目录
  • 命令替换, 反引号(``) 所包含的pwd,即为需要执行的shell的cmd获取当前目录的路径。
  • echo加上-n的参数,前面提到过。是取消掉打印后的自动换行
最终运行效果:
2fdeb45779942d4a451b28a632599c7b.png

本小节结束,待更新。。。

参考资料

  • 菜鸟教程——shell教程
  • 实验楼课程——高级 Bash 脚本编程指南
  • 《Linux命令行与shell脚本编程大全(第三版)》 Richard Blum & Christine Bresnahan
  • 《Linux Shell脚本攻略(第二版)》 [印] Shantanu Tushar / [印] Sarath Lakshman
  • Advanced Bash-Scripting Guide    Mendel Cooper
24a0ffc1e3bf81451630c4835632601e.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值