Shell特殊位置变量以及常用内置变量总结

目录

[1. 特殊的状态变量](#1. 特殊的状态变量)

[1.1 ?(上一个命令的退出状态)](#1.1 ?(上一个命令的退出状态))

[1.2 (当前进程的 PID)](#1.2 (当前进程的 PID))

[1.3 !(后台进程的 PID)](#1.3 !(后台进程的 PID))

[1.4 _(上一条命令的最后一个参数)](#1.4 _(上一条命令的最后一个参数))

2.常用shell内置变量

[2.1 echo(输出信息)](#2.1 echo(输出信息))

[2.2 eval(执行二次解析)](#2.2 eval(执行二次解析))

[2.3 exec(替换当前进程)](#2.3 exec(替换当前进程))

[2.4 shift(移动位置参数)](#2.4 shift(移动位置参数))

[2.5 exit(退出 Shell 进程)](#2.5 exit(退出 Shell 进程))

[2.6 Read命令](#2.6 Read命令)


1. 特殊的状态变量

Shell 进程执行命令时,系统会返回一个状态码(也叫退出状态或返回值)来表示命令执行的结果。

1.1 $?(上一个命令的退出状态)

  • $? 用来获取上一个命令的返回值。
  • 返回 0 表示命令执行成功 ,返回非 0 表示执行失败。
bash 复制代码
ls /home  # 假设这个命令成功
echo $?   # 输出 0

ls /nonexistent  # 这个目录不存在,命令失败
echo $?   # 输出非 0(通常是 2 或 1)

1.2 $$(当前进程的 PID)

  • $$ 表示当前 Shell 进程的 进程号(PID)。
bash 复制代码
echo $$  # 输出当前 Shell 进程的 PID

1.3 $!(后台进程的 PID)

  • $! 用于获取 返回最近一个后台进程的进程号(PID) (& 结尾的命令)的 PID。
  • & 让 sleep 30 命令在后台运行,这样 Shell 会立即返回到命令行,sleep 会在后台运行,而你可以继续执行其他命令,而不需要等待它完成。不会等待 30 秒。
bash 复制代码
sleep 30 &  # 让 sleep 30 秒,并放到后台运行
echo $!     # 输出 sleep 命令的 PID

1.4 $_(上一条命令的最后一个参数)

  • $_ 代表上一个命令的最后一个参数。
  • 也可以在命令行输入时快速使用它,提高效率。
bash 复制代码
echo Hello World
echo $_  # 输出 "World"

2.常用shell内置变量

Shell 提供了一些常用的内置命令,比如 echo、eval、exec、shift、exit 等。

2.1 echo(输出信息)

echo 用于打印字符串或变量。

选项:

  • -n:不换行
  • -e:解析转义字符(如 \n 换行,\t 制表符)
bash 复制代码
echo -n "Hello, "  
echo "World!"  

echo -e "Line1\nLine2\nLine3"

2.2 eval(执行二次解析)

  • eval 先解析参数,再执行。
  • 适用于 动态构造的命令。
bash 复制代码
cmd1="ls"
cmd2="-l"
full_cmd="$cmd1 $cmd2"

echo "$full_cmd"  # 只是输出 ls -l
eval "$full_cmd"  # 先解析 full_cmd 变量,再执行 ls -l

2.3 exec(替换当前进程)

  • exec 不会创建新进程,执行完退出该进程
bash 复制代码
exec ls -l  # 进程被替换,执行完 ls 后 shell 进程结束
echo "This will not be executed"

2.4 shift(移动位置参数)

  • shift 用于 移动脚本参数(1、2...)。
  • 默认 shift 1,相当于丢弃 $1,后面的参数前移。
bash 复制代码
#!/bin/bash
echo "First: $1"
shift  # 移动参数
echo "Now First: $1"

bash script.sh A B C
# 输出:
# First: A
# Now First: B

2.5 exit(退出 Shell 进程)

  • exit [状态码] 退出当前 Shell 进程,并返回指定的状态码(默认 0)。
bash 复制代码
exit 6  # 退出 shell,并返回状态 6
bash 复制代码
bash myscript.sh
echo $?  # 输出 myscript.sh 退出时的返回值

2.6 Read命令

read 是一个非常常用的 Shell 内置命令,用来 从标准输入(通常是键盘)读取一行数据,并将其存储到指定的变量中。它的用法非常灵活,可以用于交互式输入、文件读取等场景,下面是基本用法

bash 复制代码
read name age
echo "Name: $name, Age: $age"

Red有很多用法,后续有时间会陆续补充完善

相关推荐
vibecode21 分钟前
网站服务器失去响应怎么解决?我把连接超时和读超时这两段计时拆开跑了一遍
运维·服务器
工业一体机老司机1 小时前
Docker部署工控机采集服务 Compose编排与开机自启
运维·docker·容器
迪康Defender2 小时前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
lzx_0022 小时前
Linux 进程(二) 深入理解进程
linux
沫璃染墨3 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
温暖小土3 小时前
在 CentOS 上安装 Redis Stack
linux·redis·centos
GeW4 小时前
国产化替代进入深水区之后Linux 与数据库为什么必须走向重建
linux
万联WANFLOW5 小时前
异地厂区视频监控远程运维:从组网到安全的实施要点
运维·网络·安全·企业组网·sdwan
衍玊5 小时前
深入剖析 TCP/IP 网络通信原理与内核实现
服务器·网络·tcp/ip
十碗饭吃不饱5 小时前
SSH 密钥认证详解:原理、实操、参数、排错与加固
运维·ssh