当前位置: 首页 > news >正文

Linux》》Shell脚本 基本语法

执行脚本的三种方式

查找变量的过程

变量引用的顺序》》先从当前进程查询变量,如果当前进程没有此变量,默认去父进程查找这个变量。如果查找到则返回,否则一直查找到 祖宗(PID为1),还没有,则就没找到。
export修饰变量,则表明这个变量对子进程是可见的。或者说 用export 修饰的变量,可以转递给子进程。

在这里插入图片描述

运算符

#  $((算式)) 是新语法  或  $[ 算式 ]  就语法 不推荐
# $((算式))  中的算式 可以用数学中 >=、*等  变量可省略 $   用途场景 数学运算、数值比较   不支持浮点型  
# $[ 算式 ]   大于 -gt,小于  lt等        变量可省略 $   用途场景 文件属性  、字符串

在这里插入图片描述

test

test expression

或者使用方括号的简写形式:

[ expression ] 这种更常用
注意:使用方括号格式时,表达式与方括号之间必须有空格,即 [空格EXPRESSION空格]
[ ] 》》》1, 即false
[ xx ] 》》0 ,即true
当 test 判断的表达式为真时,返回状态码为 0;如果为假,则返回非 0 值。

在这里插入图片描述
功能
test 命令可以进行以下几种类型的测试:

数值比较:检查两个数值之间的关系。

字符串比较:检查字符串是否相等或为空。

文件测试:检查文件是否存在、是否可读、是否可写等。

常用选项
数值比较
-eq:等于

-ne:不等于

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

# 数值比较
#!/bin/bashnum1=10
num2=20if test $num1 -lt $num2; thenecho "$num1 小于 $num2"
elseecho "$num1 不小于 $num2"
fi

字符串比较
=:字符串相等

!=:字符串不相等

-z:字符串为空

-n:字符串非空

# 字符串比较
#!/bin/bashstr1="hello"
str2="world"if [ "$str1" = "$str2" ]; thenecho "字符串相同"
elseecho "字符串不同"
fi

文件测试
-e:文件存在 existence

-f:文件是普通文件 file 文件存在且是一个普通的文件

-d:文件是目录 directory 文件存在且是一个目录

-r:文件可读 read

-w:文件可写 write

-x:文件可执行 execute

# 文件测试
#!/bin/bashFILE="/etc/passwd"if [ -e "$FILE" ]; thenecho "文件 $FILE 存在"
elseecho "文件 $FILE 不存在"
fi

&& 、|| 跟高级语言 and ,or 一样, 还称短路 运算符

条件1 && 条件2   》》 如果条件1为  真 true,则会继续判断 条件2   》》 如果条件1为  假  false ,则不会执行 条件2
条件1  ||  条件2》》 如果条件1为  真 true,则不会执行 条件2   》》 如果条件1为  假  false ,则会继续判断  条件2

在这里插入图片描述
》》多重判断条件
在这里插入图片描述

流程控制

if 判断
#############   单分支 ############  
if [ condition ];thencommand
fi
# 或者
if [ condition ] 
thencommand
fi
############   多分支 ############  
if [ condition ]; thencommand
elif [ condition ] 
thencommand
else command
fi
case

相当于 C# 中 switch case
;; 相当于 break
*) 相当于 default

casein
模式1)command1command2...commandN;;
模式2)command1command2...commandN;;
esac
#!/bin/bash
while true
do
echo "请录入成绩的等级"
read num
case $num inA) echo "优秀";;B) echo "良好";;C) echo "及格";;*) echo '不及格';;
esac
done
~          

在这里插入图片描述

for
# 语法1
for (( 初始值; 循环控制条件; 变量变换  ))
docommand
done
# 例子
for((i=0;i<5;i++))
#  语法2
for var in item1 item2 ... itemN
docommand1command2...commandN
done
# 例子
for i in {0..4}
for i in `seq 0 4`
#  也可以写成一行
for var in item1 item2 ... itemN; do command1; command2… done;

#!/bin/bash
for (( i=1;i<=100;i++))
dosum=$((sum + i))  # 或  sum=$[ $sum + $i]
done
echo $sum  
while
# 基本语法
while [ 条件判断式 ]
docommand
done# 案例
#!/bin/bash
i=0
while [ $i -lt 101 ]
do((sum2=sum2+i))((i++))#或者# let sum2+=i# let i++# 或者换成 这种是旧语法  不推荐 # sum2=$[ $sum2 + $i ]# i=$[$i + 1]
done
echo $sum2

》》# 旧语法(不推荐)
result=$[4 * (5 + 1)]

》》# 新语法(推荐)
result=$((4 * (5 + 1)))
在这里插入图片描述

read 读取控制台输入

# 基本语法
read  (选项) (参数)
选项:-p   指定读取值时的提示符-t   指定读取值时等待的时间(单位秒),如果不加 -t,表示一直等下去
参数:变量:  指定读取值的变量名 (读取的赋给那个变量) 这个不能省略

在这里插入图片描述

相关文章:

  • Apptrace如何帮我精准追踪移动广告效果?
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • Java数据结构——第 2 章线性表学习笔记
  • 哈夫曼树Python实现
  • 目标检测之YOLOV11谈谈OBB
  • maven项目无远程仓库开发配置(无外网、无maven私服)
  • “本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评
  • angular 图斑点击,列表选中并滚动到中间位置
  • 【目标检测】IOU的概念与Python实例解析
  • SQL分片工具类
  • Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!
  • Softhub软件下载站实战开发(五):分类模块实现
  • C语言学习day17-----位运算
  • LeeCode94二叉树的中序遍历
  • SpringBoot定时监控数据库状态
  • thinkphp8 模型-一对一,一对多,多对多 学习
  • 软件工程(期末复习班)
  • .NET 的配置系统
  • CLion + STM32环境配置,亲测有效(2025.06.19记)
  • 磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(上)
  • 网站建设哪家有实力/seo怎么做整站排名
  • 上海智能网站建设设计/咸宁网站seo
  • 泰安网络网站/找相似图片 识别
  • cms搭建网站/seo排名优化推广教程
  • 专业网站优化/网络公司起名
  • 管理网站怎么做的/网站推广优化教程