首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >linux之shell编程(三)

linux之shell编程(三)

作者头像
用户6280468
发布2022-03-21 14:14:14
发布2022-03-21 14:14:14
6300
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux

大家五一劳动节快乐,我们继续来分享linux下的shell编程,今天是最后一篇shell编程系列文章,主要分享循环结构如何写。

一、for和while循环结构

在写这个之前,还是提示大家一下,这和我们c、c++里面的写的for、whil循环结构思想一样,只是规则稍微有点不一样仅此而已。

1、for循环结构格式和实战演示:

a、for循环书写格式:

代码语言:javascript
复制
for 变量名 in  取值列表
do
    命令序列
done

b、案例演示:

代码语言:javascript
复制
#!/bin/bash
for i in 1 2 3 4 5
do
     echo $i
done

演示结果:

代码语言:javascript
复制
root@txp-virtual-machine:/home/txp# source test.sh
1
2
3
4
5

2、while循环结构格式和实战演示:

a、while循环书写格式:

代码语言:javascript
复制
while 条件测试操作
do
    命令序列
done

b、案例演示:

代码语言:javascript
复制
#!/bin/bash
i=1
j=10
while [ $i -lt $j ]
do
     echo $i
     i=$(($i+1))
done

演示结果:

代码语言:javascript
复制
root@txp-virtual-machine:/home/txp# source test.sh
1
2
3
4
5
6
7
8
9

注意:while后面的[]两边都有空格,[]后面有分号分号(如果do放在一行的话),i++的写法中有两层括号。

二、case语句:

shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同。shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break)。

1、case语句的格式书写:

代码语言:javascript
复制
case 变量值 in
模式1)
     命令序列1
     ;;
模式2)
     命令序列2
     ;;
     .......
*)
    默认命令序列
esac

2、案例演示:

代码语言:javascript
复制

#!/bin/bash
var=9;
case $var in
8)
   echo "8"
   ;;
9)
   echo "9"
   ;;
esac

演示结果:

代码语言:javascript
复制
root@txp-virtual-machine:/home/txp# source test.sh
9

三、调用shell程序的传参

不知大家看到这个,有没有想到我们c语言里面int main 函数的标准写法呢:

代码语言:javascript
复制
int main(int argc , char *argv[])

之前的c语言系列文章里面有介绍这个(c语言main函数里的参数argv和argc解析),这里就不再介绍了。没错我们的shell接收用户的传参和这个思想类似的,在我们shell里面传参规则是:

代码语言:javascript
复制
$0对应的是当前Shell脚本程序的名称

$#对应的是总共有几个参数

$*对应的是所有位置的参数值

$?对应的是显示上一次命令的执行返回值

$1、$2、$3……则分别对应着第N个位置的参数值

我们具体来写一个案例演示:

代码语言:javascript
复制
#!/bin/bash
echo $0 $? $* $# $1 $2 $3

演示结果:

代码语言:javascript
复制
root@txp-virtual-machine:/home/txp# source test.sh aa bb cc
bash 0 aa bb cc 3 aa bb cc

这里稍微再注意我们c语言的传参:

代码语言:javascript
复制
C语言:./a.out aa bb cc 	argc = 4, argv[0] = ./a.out, argv[1]是第一个有效参数····

注意到这里argc等于4,它把argv[0]也统计进去了;而我们shell当中是没有把$0统计到传入的参数统计当中去哦

四、总结:

好了,今天的内容就分享到这里了,感谢大家的支持,这期一系列shell编程文章就暂告一段落了,日后工作当中有遇到其他用法,再跟大家分享。明天开始继续分享uboot和linux内核的问章了,中间也会插入Makefile的文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档