目录
一. 特殊变量
1.1 shell相关
⏹查看当前shell解释器的路径
apluser@FengYeHong-HP:~$ echo "$SHELL"
/bin/bash
apluser@FengYeHong-HP:~$ echo "$BASH"
/bin/bash
⏹查看当前bash的版本号
apluser@FengYeHong-HP:~$ echo "$BASH_VERSION"
5.1.16(1)-release
1.2 登录用户名和服务器名
⏹登录用户名
apluser@FengYeHong-HP:~$ echo "$USER"
apluser
apluser@FengYeHong-HP:~$ echo "$LOGNAME"
apluser
apluser@FengYeHong-HP:~$ id -un
apluser
⏹登录服务器名
apluser@FengYeHong-HP:~$ echo "$NAME"
FengYeHong-HP
apluser@FengYeHong-HP:~$ hostname
FengYeHong-HP
1.3 路径相关
⏹用户家目录
apluser@FengYeHong-HP:~$ echo "$HOME"
/home/apluser
apluser@FengYeHong-HP:~$ echo ~
/home/apluser
⏹当前工作目录
apluser@FengYeHong-HP:~$ echo "$PWD"
/home/apluser
apluser@FengYeHong-HP:~$ echo ~+
/home/apluser
⏹可执行文件的搜索路径 → $PATH
apluser@FengYeHong-HP:~$ echo "$PATH" | xargs -d ':' -L 1 | head
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/usr/lib/wsl/lib
1.4 随机数
apluser@FengYeHong-HP:~$ echo "$RANDOM" | md5sum | cut -c 1-8
3abe73c4
1.5 $符号
系列
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名(含路径)。在命令行执行时就是命令本身。 |
$n | 第 n 个参数(如 $1 表示第一个参数)。 |
$# | 传入脚本的参数个数。 |
$* | 传入的所有参数,作为一个整体字符串。 |
$@ | 传入的所有参数,每个参数独立展开。 |
$$ | 当前 Shell 的进程 ID (PID)。 |
$! | 最近一次在后台执行的命令的 PID。 |
$? | 最近一条命令的返回状态(0 表示成功,非 0 表示失败)。 |
$_ | 上一条命令的最后一个参数。 |
$- | 当前 Shell 的选项标志。 |
1.6 其他
⏹查看当前终端启动的时间
apluser@FengYeHong-HP:~$ echo "$SECONDS"
2234
⏹查看在当前脚本中的行号
apluser@FengYeHong-HP:~$ echo "当前所在的行是: $LINENO"
当前所在的行是: 76
二. 路径
2.1 /dev/null
⏹/dev/null
在 Linux(以及类 Unix 系统)里是一个 特殊设备文件,常被称为 黑洞
或 位桶
(bit bucket)。它的主要作用是:
- 丢弃输出,往
/dev/null
写入的所有数据都会被直接丢弃,不会保存也不会报错。echo "hello" > /dev/null
- 清空文件
cat /dev/null > file.txt
- 把不需要的标准输出或标准错误重定向到
/dev/null
> /dev/null
:丢掉正常输出2>&1
:丢掉错误输出
apluser@FengYeHong-HP:~$ ls /root ls: cannot open directory '/root': Permission denied apluser@FengYeHong-HP:~$ apluser@FengYeHong-HP:~$ ls /root > /dev/null ls: cannot open directory '/root': Permission denied apluser@FengYeHong-HP:~$ apluser@FengYeHong-HP:~$ ls /root > /dev/null 2>&1 apluser@FengYeHong-HP:~$ echo "$?" 2
# 2> 表示 标准错误输出 重定向到 /dev/null # 如果 ls /root 成功 → 会显示目录内容 # 如果失败(比如没有权限) → 错误信息丢到 /dev/null # 也就是说:成功时会输出内容,但是失败时不会显示内容 ls /root 2> /dev/null # > /dev/null → 把 标准输出 丢弃 # 2>&1 → 把 标准错误 也重定向到 标准输出,而标准输出已经被丢到 /dev/null # 无论成功还是失败 → 任何输出都丢掉,终端上一点东西都不会显示 ls /root > /dev/null 2>&1
- 在 Bash 里,
if
并不是判断输出结果,而是判断命令的退出状态码 ($?
) 0
表示成功(条件成立),非0
表示失败(条件不成立)printenv
用来打印环境变量- 如果环境变量
USERNAME
存在,就会输出它的值,并返回状态码 0。 - 如果环境变量不存在,就会返回状态码 非 0
- 因为我们使用
/dev/null 2>&1
来丢弃标准和错误输出,因此即使变量不存在也不会报错。
- 如果环境变量
if printenv USERNAME > /dev/null 2>&1; then echo "环境变量 USERNAME 存在" else echo "环境变量 USERNAME 不存在" fi
2.2 /dev/urandom
⏹获取随机数的路径,必须指定要获取的范围
apluser@FengYeHong-HP:~$ cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 12
KdBX3jPgX9EC
2.3 查看服务器的发行版
apluser@FengYeHong-HP:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
2.4 /etc
下的系统路径
路径 | 作用 |
---|---|
/etc/os-release | 当前发行版信息。 |
/etc/passwd | 用户账号信息。 |
/etc/group | 用户组信息。 |
/etc/hosts | 主机名解析。 |
/etc/resolv.conf | DNS 配置。 |
/etc/fstab | 文件系统挂载表。 |
/etc/shadow | 用户密码哈希(仅 root 可读) |