
Shell小笔记(四)
本文示例使用 Bash,别名主要在交互式终端中使用。
别名
格式
在Linux中,别名的命令为 alias ,其使用方法为: alias 别名="表达式"
- 别名通常只包含一个或多个简单的命令
- 默认定义的是临时别名,只需要在终端输入
unalias 别名或关闭当前终端即可撤销 - 如需长期使用,个人 Bash 别名通常写入
~/.bashrc,并执行source ~/.bashrc使当前 Shell 立即生效;登录 Shell 是否读取它,取决于个人配置。/etc/profile是系统级登录初始化文件,不是唯一的配置位置。
举例
将 test 定义为 ls -l的别名
1 | alias test="ls -l" |
💡提示:这里沿用截图里的 test 名称,不过它会遮住原本的 test 条件测试命令。平时更建议用 ll;unalias test 可撤销此别名。
将 remove 定义为 rm -i 的别名
1 | alias remove="rm -i" |

Bash 默认不在非交互脚本中展开别名,因此脚本中需要复用命令时,通常使用函数。
函数
格式
Shell 也能把一组命令打包成函数,少写几遍重复代码;其格式如下:
1
2
3
4
5
6
7function_name () {
# 函数的命令和操作
# 可以使用参数和局部变量
# 可以使用 return 语句来返回退出状态
# 函数定义必须在实际调用前执行到
: # 空命令占位,实际使用时替换为具体命令
}要调用一个Shell函数,只需写函数名称,调用时不加括号,可以传递参数作为函数的输入
基本调用:
函数名带参调用:
函数名 参数除此之外,还有些特殊字符,如下所示:
符号 解释 $0脚本的名称 $1$2$3…函数或脚本的参数, $1表示第一个参数,以此类推$#参数的数量 $@"$@"保留每个参数的边界$*"$*"将所有参数合为一个字符串$?上一个命令的退出状态;
用于检查命令是否成功执行(0 表示成功,非零表示失败)$$当前 Shell 的 PID(Bash 子 Shell 中通常仍保留父 Shell 的 $$)$!最后一个在后台启动的命令或进程的PID(进程号)
函数内部的 $1、$# 等对应本次函数调用的参数,$0 仍是脚本名;local 定义的变量在函数内使用,避免随手覆盖外面的同名变量。
举例
1 |
|
返回值
说明
在 Shell 中,需要区分退出状态和输出结果:return 用于返回状态,echo 或 printf 用于输出文本,$(函数名) 可以捕获标准输出。
函数的退出状态可通过
$?获得,必须及时读取,后续命令会覆盖它需要自定义返回值时,可使用:
return N(其中 N 的取值范围为:0-255)如果不加,将以最后一条命令的退出状态作为返回值;省略
return时也如此通常情况下,返回值为
0为无错误返回,处于1-255内为有错误返回
💡提示:返回值是一组状态码;如果需要自定义输出(如特定文本),请使用echo。
举例
写一个输出返回值的函数
1 |
|

如果需要得到大于 255 的计算结果,应输出结果,再用命令替换捕获;这不是把更大的状态码放进变量。Bash 中 return 256 的状态会变为 0,拿它返回普通数值就容易整出误会。下面沿用原截图的输入和输出形式:
1 |
|

内部命令
(1)内部命令(内建命令)是 Shell 的一部分,例如 cd、read、export。它们通常在当前 Shell 中执行,但放在管道或子 Shell 中时仍可能在独立进程环境中运行;功能也不一定简单。
(2)外部命令是独立的可执行程序,例如 grep、sed。不少已由系统自带,不一定需要额外安装。
- 可以通过
type 命令名查看该命令是否为内部还是外部
- 还可以通过
echo "$PATH"查看查找外部命令时搜索的目录列表(具体命令的位置可用type -a 命令名查看)








