$# 是 Shell 预定义的特殊变量,表示命令行传入的位置参数个数(不包括脚本名 $0),自动赋值,可用于数值比较和参数校验。

用 $# 就能直接获取脚本执行时接收到的参数总个数。
为什么是 $#
这是一个预定义的特殊变量,Shell 在运行脚本时自动赋值,代表传入的位置参数(即命令行参数)数量。它不包括脚本名本身($0),只统计 $1、$2 … 这些实际参数。
基本用法示例
写一个简单脚本 test.sh:
#!/bin/bash echo "共收到了 $# 个参数"
保存后执行:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
./test.sh a b c→ 输出:共收到了 3 个参数 -
./test.sh "hello world" -v --debug→ 输出:共收到了 3 个参数(引号内的空格不拆分,算作一个参数) -
./test.sh→ 输出:共收到了 0 个参数
配合条件判断常用场景
多数健壮脚本会先检查参数个数是否符合预期:
#!/bin/bash
if [ $# -lt 2 ]; then
echo "错误:至少需要两个参数,当前只有 $# 个"
exit 1
fi
echo "参数1: $1, 参数2: $2"
注意:[ $# -lt 2 ] 中的 -lt 是“小于”比较符,适用于整数;$# 始终是数字,可安全用于数值判断。
和其他参数变量的关系
理解 $# 有助于把握整体参数结构:
-
$0:脚本自身路径或名称 -
$1 $2 … $9 ${10} ${11}:按顺序的各个参数(第10个起需大括号) -
$@和$*:分别表示“各参数独立”和“所有参数拼成一个字符串”,它们的元素个数也等于 $#

















