Shell(二)

一、条件测试

程序运行中经常需要根据实际情况来运行特定的命令或代码段,比如判断两个变量值大小关系,判断是否为目录/文件。我们需要自己实现一个判断的过程。可以使用test或 [测试一个条件是否成立,如果测试结果为真,返回0,如果测试结果为假,返回1,如果使用[开头需要使用]结尾。

  • test -d x 如果x是一个目录则条件为真返回0
  • test -f x 如果x是一个普通文件则条件为真返回0
  • test -z x 如果x的长度为零则条件为真返回0
  • test s1 = s2 如果两个字符串相同则为真返回0
  • test num1 OP num2 num1和num2应该是整数或者取值为整数的变量,OP可以是以下判断中的任意一个: -eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)
  • 同样还支持逻辑判断exp1 -a exp2表示逻辑与;exp1 -o exp2表示逻辑或;!exp表示逻辑非。

**注意:**使用[]时[ 后面有个空格,]前面也有一个空格,不添加会报错。
如何查看返回值呢?
可以通过echo $?获取返回值,例如:
在这里插入图片描述

二、判断

if判断

格式:

if 条件测试; then
   命令
fi

以if开始,fi结尾

if/else判断格式:

if 条件测试;then
	命令
else
	命令
fi

if/elif/else判断格式:

if 条件测试1;then
	命令1
elif 条件测试2;then
	命令2
elif 条件测试3;then
	命令3
...
fi

我们简单运用一下if:
在helloworld.sh同一目录下创建新文件test.sh

 #!/bin/bash
 if [ -f ./helloworld.sh ];then                                                                                                                           
    echo "helloworld.sh is a file"
 else
    echo "helloworld.sh is not a file"
 fi

如下图:
在这里插入图片描述
创建出来的文件默认不带有可执行权限,可以通过上一篇的方法给文件+权限,也可以使用. 文件的方法执行此文件:
在这里插入图片描述

case判断

case作用就和C语言中的switch case一样,只不过没有switch,以case开头esac结尾,格式如下:

case 变量 in
常量或者表达式1) 命令1 ;;
常量或者表达式2) 命令2 ;;
常量或者表达式3) 命令3 ;;
常量或者表达式4) 命令4 ;;
esac

末尾的;;相当于C语言中的break
示例:

#!/bin/bash
printf "please input your choice : [y/n/h/q]\n"
read VAR  #从键盘中读取  可以理解为cin
case $VAR in
y|Y)  echo "your choice is Yes!" ;;
n|N)  echo "your choice is No!" ;;
h|H)  echo "you need help!" ;;                                                                                                                           
q|Q)  echo "your choice is Quit!" ;;
esac

效果如下:
在这里插入图片描述
补充: 在case中*)的作用就类似于default。

三、循环

for循环

以下示例需要自己添加可执行权限,不在重复提示

1.类C for循环:
所谓类C就是和C语言的for循环结构相同,如下:

#!/bin/bash
 
for((i = 0; i < 10; i++))
do
  echo "the time is $i"    
done   

其中,do的位置和之前的then位置相同,可以和for同一行,但需要;隔开,也可以换行写,示例如下:

#!/bin/bash
  
for((i = 0; i < 10; i++));do                                                                                                                             
  echo "the time is $i"    #$i取值
done

执行结果:
在这里插入图片描述
2.带列表的for循环
设置一个变量 在一个列表中自动循环,类似C++中for(auto fruit:fruits);
代码:

#!/bin/bash

for FRUIT in apple orange strawberry banana pear                                                                                                         
do
  echo "I like $FRUIT"
done

效果:
在这里插入图片描述
3.不带列表的for循环
上个例子,列表是for循环的范围,那不给列表怎么循环呢?所以在运行脚本时,我们必须通过参数传递一个“范围”,传递一个列表。
代码:

#!/bin/bash

for FRUIT
do
  echo "I like $FRUIT"
done   

运行结果:
在这里插入图片描述

while循环

格式:

while 条件
do
	命令
done

代码示例(输入一个数字,递减到1):

#!/bin/bash
 
printf  "设置倒计时:"
read time
while [ $time -gt 0 ] 
do
  echo "$time"
  let "time-=1" #let 执行算数操作                                                                                                                        
done

运行效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值