Linux学习笔记3:shell脚本常用语法规律集合

 一、什么是Shell脚本?

Shell脚本是一种用来自动化执行Linux/Unix命令的脚本程序,本质是包含一系列命令的文本文件。通过Shell解释器(如Bash)执行,可以完成文件操作、系统管理、任务自动化等复杂操作。

二、基础语法结构

1. 脚本声明(Shebang)

#!/bin/bash
echo "Hello World!"

- #!  称为Shebang,指定解释器路径
- 注释以 # 开头
- 建议使用 `#!/usr/bin/env bash` 增强兼容性

2. 执行权限

chmod +x script.sh  # 添加执行权限
./script.sh         # 执行脚本

三、核心语法规律

1. 变量操作

name="John"          # 定义变量(等号无空格)
echo $name           # 使用变量
readonly PI=3.14     # 只读变量
unset name           # 删除变量

注:变量名区分大小写,推荐小写加下划线命名法(my_var)

2. 特殊变量

     

变量说明  示例
$0脚本名称 echo "脚本名称: $0"  
$1第一个参数echo "第一个参数: $1"  
$2 第二个参数 echo "第二个参数: $2"
$#参数个数echo "参数个数: $#"
$@所有参数(以字符串形式echo "所有参数: $@"  
$* 所有参数(以单个字符串形式)echo "所有参数: $*"  
$?上一个命令的退出状态码

 ls /nonexistent_file;

echo "退出状态码: $?"  

$$ 当前Shell进程的PIDecho "当前进程ID: $$"
$!最后一个后台进程的PID sleep 10 & echo "后台进程ID: $!"
$_ 上一条命令的最后一个参数

ls -l /tmp/very_long_filename;

echo "最后一个参数: $_"

使用示例:创建一个名为 `test.sh` 的脚本,内容如下:  

#!/bin/bash  
echo "脚本名称: \$0"  
echo "第一个参数: \$1"  
echo "第二个参数: \$2"  
echo "参数个数: $#"  
echo "所有参数(以字符串形式): $@"  
echo "所有参数(以单个字符串形式): $*"  
ls /nonexistent_file  
echo "上一个命令的退出状态码: $?"  
sleep 10 &  
echo "后台进程ID: $!"  
ls -l /tmp/very_long_filename # 假设/tmp下有这个文件  
echo "最后一个参数: $_"  
echo "当前进程ID: $$"  

执行脚本

chmod +x test.sh  
./test.sh arg1 arg2 arg3  

 随后会有类似的输出效果(实际效果可能会因环境不同而不同)

脚本名称: ./test.sh  
第一个参数: arg1  
第二个参数: arg2  
参数个数: 3  
所有参数(以字符串形式): arg1 arg2 arg3  
所有参数(以单个字符串形式): arg1 arg2 arg3  
ls: cannot access '/nonexistent_file': No such file or directory  
上一个命令的退出状态码: 2  
后台进程ID: 12345  
ls: cannot access '/tmp/very_long_filename': No such file or directory  
最后一个参数: /tmp/very_long_filename  
当前进程ID: 67890  

四、流程控制

1. 条件判断

包括if,if else,if elif

(小声吐槽)个人认为发明shell脚本语法规律的人有点太草率了,无论是if  fi的组合还是后面case  esac的组合都让人感觉非常敷衍。。。

if [ $num -gt 10 ]; then
    echo "大于10"
elif [ $num -eq 10 ]; then
    echo "等于10"
else
    echo "小于10"
fi

注:【 】前后一定要加空格
比较运算符:
- 数值比较:`-eq`, `-ne`, `-gt`, `-lt`
- 字符串比较:`==`, `!=`
- 文件判断:`-f`(文件存在), `-d`(目录存在)

case

#!/bin/bash  

read -p "请选择操作 (start/stop/restart): " action  

case "$action" in  
  start)  
    echo "启动服务..."  
    # 启动服务的命令  
    ;;  
  stop)  
    echo "停止服务..."  
    # 停止服务的命令  
    ;;  
  restart)  
    echo "重启服务..."  
    # 重启服务的命令  
    ;;  
  *)  
    echo "无效的操作: $action"  
    ;;  
esac  

2. 循环结构

for循环:

for i in {1..5}
do
    echo "第$i次循环"
done

# 遍历文件
for file in *.txt
do
    echo "处理文件: $file"
done

while循环:

count=1
while [ $count -le 5 ]
do
    echo "计数: $count"
    ((count++))
done

五、函数与参数

1. 定义函数

function greet() {
    local name=$1  # 局部变量
    echo "Hello, $name!"
    return 0
}
greet "Alice"      # 调用函数
echo "返回值: $?"

2. 参数传递示例

#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "所有参数: $@"
echo "参数个数: $#"

详细示例可以跳转至上文 2.特殊变量 研究。

六、总结

Shell脚本的语法规律可归纳为:
1. 严格依赖空格格式(中括号附近要使用空格,但是使用如 ”$total=$firstnum + $secondnum“这种语句时切记不可在等号前后加空格,否则会显示无法找到命令)
2. 命令返回值驱动逻辑
3. 强调字符串处理能力

希望这篇指南能帮助您系统掌握Shell脚本编写!如有疑问欢迎评论区交流,共同学习进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值