原标题:Bash Shell脚本
Bash Shell 基础概念
| 变量 | 含义 | 示例 |
|---|---|---|
$0 |
当前脚本名 | test.sh |
$1 |
第一个参数 | Tom |
$2 |
第二个参数 | 18 |
$# |
参数数量 | 2 |
$@ |
所有参数(逐个保留) | Tom 18 |
$* |
所有参数(整体) | Tom 18 |
$$ |
当前 Shell 的 PID | 12345 |
$? |
上一个命令退出码 | 0 |
$HOME |
家目录 | /home/tom |
$PATH |
命令搜索路径 | /usr/bin:/bin |
$USER |
当前用户名 | tom |
$PWD |
当前工作目录 | /home/tom/project |
$SHELL |
当前 Shell 程序 | /bin/bash |
变量
Bash 变量不需要声明类型,直接赋值即可,注意等号两边不能有空格:
name="Tom"
echo $name
name="star"
age=25
echo $name # 引用变量用 $
echo ${name} # 更规范的写法,尤其是拼接字符串时
#Shell 变量没有类型
age=20
path="/home"
hello="world"
变量为什么不用 $
赋值:
name=Tom
取值:
echo$name
因为
name
表示变量名字。
而
$name
表示变量里面的内容。
if 条件判断
age=18
if [ $age -ge 18 ]; then
echo "Adult"
fi
if [ "$age" -gt 18 ]; then
echo "成年"
elif [ "$age" -eq 18 ]; then
echo "刚好18"
else
echo "未成年"
fi
常用比较符:
- 数字:
eqnegtltgele - 字符串:
=!=z(空)n(非空) - 文件:
f(存在且是文件)d(存在且是目录)e(存在)
| 运算符 | 英文 | 含义 | 示例 |
|---|---|---|---|
-eq |
equal | 等于 | 5 -eq 5 |
-ne |
not equal | 不等于 | 5 -ne 3 |
-gt |
greater than | 大于 | 5 -gt 3 |
-lt |
less than | 小于 | 3 -lt 5 |
-ge |
greater than or equal | 大于等于 | 5 -ge 5 |
-le |
less than or equal | 小于等于 | 3 -le 5 |
for 循环
# 遍历列表
for i in 1 2 3 4 5; do
echo $i
done
# 遍历文件
for file in /var/log/*.log; do
echo "处理: $file"
done
# C 风格
for ((i=0; i<10; i++)); do
echo $i
done
while 循环
count=0
while [ $count -lt 5 ]; do
echo $count
count=$((count + 1))
done
# 常用于逐行读文件
while read -r line; do
echo "$line"
done < file.txt
function(函数)
把一段命令封装起来复用:
function greet() {
echo "Hello, $1" # $1 是第一个参数
}
# 也可以省略 function 关键字:
greet() {
echo "Hello, $1"
}
greet "star" # 调用,输出 Hello, star
函数内部:$1 $2 ... 是传入的参数,$# 是参数个数,$@ 是所有参数。
$?
上一条命令的退出状态码。0 表示成功,非0表示失败(不同数字代表不同错误类型,由具体命令定义)。
ls /tmp
echo $? # 通常输出 0
ls /不存在的目录
echo $? # 输出非0,比如 2
这个在脚本里常用来判断上一步是否执行成功:
cp file.txt /backup/
if [ $? -eq 0 ]; then
echo "复制成功"
else
echo "复制失败"
fi
$PATH
系统查找可执行程序的目录列表,用冒号分隔。你敲一个命令(比如 ls),shell 会按 $PATH 里的顺序去这些目录找同名可执行文件。
echo $PATH
# 例如: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
如果你自己写了脚本想全局调用,得把脚本所在目录加进 $PATH,或者把脚本放进已有的 $PATH 目录里。
$HOME
当前用户的家目录路径,比如 /home/star 或 root 的 /root。很多程序的配置文件默认放在 $HOME 下(如 ~/.bashrc)。~ 其实就是 $HOME 的简写。
$USER
当前登录用户的用户名,比如 star。常用于脚本里做权限判断或个性化路径拼接。
这几个($? $PATH $HOME $USER)都属于环境变量/特殊变量,是 shell 启动时或命令执行后自动设置的,不需要你手动赋值。用 env 或 printenv 可以看到当前所有环境变量。
如果这篇文章对你有帮助,点个赞吧。


