Linux》》Shell脚本 基本语法

发布于:2025-06-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

执行脚本的三种方式

查找变量的过程

变量引用的顺序》》先从当前进程查询变量,如果当前进程没有此变量,默认去父进程查找这个变量。如果查找到则返回,否则一直查找到 祖宗(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/bash
 
num1=10
num2=20
 
if test $num1 -lt $num2; then
    echo "$num1 小于 $num2"
else
    echo "$num1 不小于 $num2"
fi

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

!=:字符串不相等

-z:字符串为空

-n:字符串非空

# 字符串比较
#!/bin/bash
 
str1="hello"
str2="world"
 
if [ "$str1" = "$str2" ]; then
    echo "字符串相同"
else
    echo "字符串不同"
fi

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

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

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

-r:文件可读 read

-w:文件可写 write

-x:文件可执行 execute

# 文件测试
#!/bin/bash
 
FILE="/etc/passwd"
 
if [ -e "$FILE" ]; then
    echo "文件 $FILE 存在"
else
    echo "文件 $FILE 不存在"
fi

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

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

在这里插入图片描述

流程控制

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

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

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

#!/bin/bash
while true
do
echo "请录入成绩的等级"
read num
case $num in
        A) echo "优秀"
                ;;
        B) echo "良好"
                ;;
        C) echo "及格"
                ;;
        *) echo '不及格'
        ;;
esac
done
~          

在这里插入图片描述

for
# 语法1
for (( 初始值; 循环控制条件; 变量变换  ))
do
  command
done
#  语法2
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
#  也可以写成一行
for var in item1 item2 ... itemN; do command1; command2… done;


#!/bin/bash
for (( i=1;i<=100;i++))
do
        sum=$((sum + i))  # 或  sum=$[ $sum + $i]
done
echo $sum  

网站公告

今日签到

点亮在社区的每一天
去签到