ShellScript脚本编程(二)

embedded/2024/9/25 10:38:10/

Shell_条件判断(一)

Shell中也有条件表达式,也就是比较两个值是否相等

基本语法

test 表达式
[ 表达式 ]  注意:中括号前后需要有空格
[root@localhost scripts]# a=10
[root@localhost scripts]# echo $a
10
[root@localhost scripts]# test $a = 10
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# test $a = 11
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a = 10 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# [ $a = 11 ]
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a=11 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# [  ]
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a != 11 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# echo $a
10

Shell_条件判断(二)

在条件判断中,除了相等于不等的判断,还有一些其他的判断

两个值比较

表达式含义表达式含义
-eq等于(equal)-ne不等于(not equal)
-lt小于(less than)-le小于等于(less equal)
-gt大于(greater than)-ge大于等于(greater equal)

文件权限判断

  1. -r 有读的权限(read)
  2. -w 有写的权限(write)
  3. -x 有执行的权限(execute)

文件类型判断

  1. -e 文件存在(existence)
  2. -f 文件存在并且是一个文件类型(file)
  3. -d 文件存在并且是一个目录类型(directory)

多条件判断

&& 与的关系,两者都成立

|| 或的关系,两者有一个成立

温馨提示

&& 表示前一个条命令执行成功之后,在执行第二个条件

|| 表示前一个条命令执行失败之后,再执行第二个条件

由此,我们可以衍生出来,类似三元运算符的形式

示例 [ $a -eq $b ] && echo "$a=$b" || echo "$a!=$b"

Shell_流程控制(一)

流程控制语句是程序中的重点知识,掌握了流程控制语句,程序的基本架构就可以搭建起来了

if判断

基本语法

if [ 条件判断 ]; then语句
fi
if [ 条件判断 ]
then语句
fi

示例

if [ $a = 10 ];then echo 'OK'; fi
#!/bin/bash
if [ $a = 10]
then echo "ok"
fi
if [ $a = 10 -a 10 = 10 ];then echo "ok";fi

Shell_流程控制(二)

在流程控制语句中,不是单一的逻辑

基本语法

if [ 条件判断 ]
then语句
else语句
fi
#!/bin/bash
if [ $1 -lt 18 ]
thenecho "未成年"
elseecho "成年人"
fi
if [ 条件判断 ]
then语句
elif [ 条件判断 ]
then语句
else语句
fi
#!/bin/bash
if [ $1 -lt 18 ]
thenecho "未成年"
elif [ $1 -lt 35 ]
thenecho "青年人"
elif [ $1 -lt 60 ]
thenecho "壮年人"
elseecho "老年人"
fi

Shell_流程控制(三)

if 如果遇到多个条件,写起来会很麻烦,可以使用 case 改写

基本语法

case $变量名 in
"值1")语句
;;
"值2")语句
;;
...省略其他分支...
*)语句
;;
esac

注意事项

  1. case行结尾必须为单词"in",每一个模式匹配必须以右括号")"结束
  2. 双分号 ";;" 表示命令序列结束,相当于跳出当前判断语句
  3. 最后 "*)" 表示默认模式结尾,不符合最终的出口
#!/bin/bash
case $1 in
1)echo "值为1"
;;
2)echo "值为2"
;;
3)echo "值为3"
;;
*)echo "其他数字"
;;
esac

Shell_流程控制(四)

循环语句用于重复执行某个操作

for语句就是循环命令,可以指定循环的起点、终点和终止条件

基本语法1

for (( 初始值; 循环控制条件; 变量变化))
do语句
done
#!/bin/bash
for (( i=0;i<=100;i++ ))
dosum=$[$sum+$i]
done
echo $sum

基本语法2

for 变量 in 值1 值2 值3...
do语句
done
#!/bin/bash
for os in linux windows macos
doecho $os
done

内部运算符

在shell中,{}是内部运算符,{}表示一个序列,例如,从1写到100: {1..100}

#!/bin/bash
for i in {1..100}
dosum=$[$sum+$i]
done
echo $sum

$*$@

$*$@非常相似,都代表命令行所有的参数,但是$*把参数看成是一个整体,例如123 456。而$@把每个参数区分对待,例如换行显示 注意:在没有循环遍历时候,两者效果一致

#!/bin/bash
echo '=====$*====='
for param in "$*"
doecho $param
done
echo '=====$@====='
for param in "$@"
doecho $param
done

Shell_流程控制(五)

循环语句除了for之外,还有一个while循环

基本语法

while [ 条件判断 ]
do语句
done
#!/bin/bash
a=1
while [ $a -le $1 ]
dosum=$[$sum+$a]a=$[$a+1]
done
echo $sum
#!/bin/bash
a=1
while [ $a -le $1 ]
do
#    sum=$[$sum+$a]
#    a=$[$a+1]let sum+=alet a++
done
echo $sum

Shell_读取控制台输入

读取控制台信息,既简单又很实用

基本语法

read 选项 参数
  1. 选项:

    • -p:指定读取值时候的提示符
    • -t:指定读取值时候的等待时间(秒) 如果不添加 -t 表示一直等待
  2. 参数:

    • 变量:指定读取值的变量名
read -t 10 -p "请输入您的名字:" name
echo "welcome,$name"

 


http://www.ppmy.cn/embedded/29240.html

相关文章

视频监控平台-OSD源代码解释和分享:通过大华SDK设置大华设备的OSD

目录 一、OSD介绍 &#xff08;一&#xff09;OSD的定义 &#xff08;二&#xff09;OSD的设置 1、自定义文本 2、图标和符号 3、定位和叠加 二、代码和解释 &#xff08;一&#xff09;代码和注释 &#xff08;二&#xff09;代码解释 1、概述 2、代码详细解释 一、…

Docker新建应用容器引擎与启动ssh服务

XZ的账户资料&#xff1a; 使用SecureCRT的ssh2协议远程登陆 ip: 192.XXX.X.XXX port: XXXX 用户名&#xff1a;xiaohua 密码&#xff1a;123456 $ docker run --name xiaohua_docker -p xxxxx:xx -it -v /home/d/xiaohua:/home/xiaohuac522ac0d6194 bash //将真实路径/…

【OceanBase诊断调优】—— 如何查看 Root Service 切换完成的时间点

本文详述如何查看 Root Service 切换完成的时间点。 在主 Root Service 节点上的 rootservice.log 搜索。 grep -i "START_SERVICE: full_service !!! start to work!!" rootservice.log[2023-12-08 14:35:58.927245] INFO [RS] ob_root_service.cpp:7111 [27152]…

开发环境虚拟环境学习记录

1、VS Code搭建python环境 下载好Visual Studio Code后&#xff0c;首先需要进入Visual Studio Code并安装支持python开发的插件&#xff1a; 2、虚拟环境 2.1、初识虚拟环境 概述&#xff1a;①、在使用Python语言的时候我们使用pip来安装第三方包&#xff0c;但是由于pip的…

React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement&#xff0c;于是去了解了一下这个函数。 就跟它的名字一样&#xff0c;克隆元素&#xff0c;可以基于一个元素创建一个新的元素&#xff0c;并且为新元素添加新的属性或者覆盖已有的属性。 下面是一个简单例子&#xff1a; .node1 {backg…

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

webpack 入口和出口的最佳实践

入口和出口的最佳实践 {ignore} 具体情况具体分析 下面是一些经典场景 一个页面一个JS 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 源码结构 |—— src|—— pageA 页面A的代码目录|—— index.js 页面A的启动模块|—— ...|—— pageB 页面…

TiDB中的PD--元数据管理和调度中心

目录 PD 架构etcd 的使用TiDB 的 PD(Placement Driver)组件是整个分布式数据库系统的关键部分, 是整个集群的元数据管理和调度中心,负责存储集群的元数据和进行 Region 调度。 主要包括: 元数据存储:PD 存储了整个 TiDB 集群的元数据,包括 TiKV 集群的拓扑结构、Namespa…