Linux 命令行入门教程
82. 位置参数与特殊变量
本教程共 90 篇 · 第 82 篇
82. 位置参数与特殊变量
上一章的脚本变量都是写死的。真实脚本要能接收你传进去的参数,这就需要位置参数。
位置参数
运行脚本时跟在后面的词,按顺序叫 $1、$2、$3…… 脚本名字本身是 $0:
./greet.sh 小明 18
在 greet.sh 里,$0 是 ./greet.sh,$1 是 小明,$2 是 18。
#!/bin/bash
echo "脚本名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
$@ 表示”全部参数”,$# 表示”参数个数”。判断用户有没有传够参数时很有用:
#!/bin/bash
echo "一共收到 $# 个参数"
echo "全部参数是:$@"
Tip想给参数设默认值,可以写成
${1:-默认值}。当$1为空时自动用默认值,脚本更健壮。
特殊变量
除了位置参数,bash 还内置几个”只读”的特殊变量,帮你掌握脚本运行状态:
| 变量 | 含义 |
|---|---|
$? | 上一条命令的退出码,0 表示成功 |
$$ | 当前脚本的进程号(PID) |
$! | 后台运行的最后一个进程号 |
上面三个才是 bash 内置的”特殊变量”(只读)。
$0脚本名和$#参数个数属于位置参数,已在上一节讲过,这里不再重复。
最常用的是 $?。每条命令执行完都会留下一个退出码:成功是 0,失败是非 0。用它能判断上一步成没成功:
#!/bin/bash
mkdir /tmp/demo
if [ $? -eq 0 ]; then
echo "目录创建成功"
else
echo "创建失败"
fi
$$ 在写临时文件时常用来避免重名,比如 /tmp/tmp.$$。
实战小例
一个带参数个数检查的问候脚本:
#!/bin/bash
if [ $# -lt 1 ]; then
echo "用法:$0 你的名字"
exit 1
fi
echo "你好,$1!"
exit 1 表示脚本以”失败”状态退出,方便被别的脚本判断是否执行成功。
小结:位置参数 $1/$@/$# 接收外部输入,$?/$$/$! 反映运行状态。下一章看变量还能玩出什么花样。