Shell 入门:简介、常用命令与脚本基础
一、Shell 简介
Shell 是操作系统的命令行解释器,也是用户与内核交互的桥梁,能执行命令、通过脚本自动化任务。
Shell 的作用
作为「中间人」,Shell 接收用户输入的命令,传递给操作系统内核执行;内核处理后将结果返回,再由 Shell 呈现给用户,无需直接操作底层硬件。
主要功能
- 执行单条命令,例如
ls查看目录、cd切换路径。 - 运行 Shell 脚本(
.sh文件),批量执行一系列命令,实现自动化(如批量备份、日志分析)。 - 支持管道(
|)、重定向(>、>>)等语法,组合多个命令完成复杂任务。 - 提供变量、循环、条件判断等编程特性,具备简单的脚本编程能力。
常见 Shell 类型
- Bash(Bourne Again Shell):多数 Linux 发行版默认 Shell,兼容大部分 Unix 命令,功能全面。
- Sh(Bourne Shell):早期 Unix 标准 Shell,功能基础,兼容性强。
- Zsh:兼容 Bash,增强自动补全、主题等,开发者常用。
- Csh / Tcsh:语法接近 C 语言,适合习惯 C 风格的用户。
现实中终端里执行的往往是 Bash 或 Zsh;写脚本时建议在首行用 shebang 指定解释器(见下文),避免「在本机行、在别人机器上不行」的环境差异。
二、常见 Shell 命令速查
下列命令按用途分组,说明尽量保留原表述并稍作归类,便于检索。
文件与目录
| 命令 | 说明 |
|---|---|
ls | 列出目录内容;ls -l 详细信息,ls -a 含隐藏文件 |
cd [目录] | 切换目录;cd .. 上级,cd ~ 家目录 |
pwd | 当前工作目录路径 |
mkdir [目录名] | 创建目录;mkdir -p 父/子 递归创建 |
touch [文件] | 创建空文件或更新时间戳 |
cp [源] [目标] | 复制;cp -r 递归复制目录 |
mv [源] [目标] | 移动或重命名 |
rm [文件] | 删除文件;rm -r 删目录,rm -f 强制 |
cat [文件] | 查看全文;head -n 5、tail -n 5 看首尾行 |
find [路径] -name [名] | 按名称查找文件或目录 |
系统与进程
| 命令 | 说明 |
|---|---|
ps | 进程列表;ps aux 详细信息 |
kill [PID] | 终止进程;kill -9 强制 |
top | 实时监控资源与进程 |
df -h | 磁盘空间(-h 人类可读单位) |
free -h | 内存使用 |
uname -a | 内核与主机信息 |
uptime | 运行时间与负载 |
用户与权限
| 命令 | 说明 |
|---|---|
whoami | 当前用户名 |
su [用户] | 切换用户;su - 并加载目标用户环境 |
sudo [命令] | 以管理员权限执行 |
chmod [权限] [文件] | 改权限,如 chmod 750 脚本.sh(仅属主可写、组可读执行);7=4+2+1 等 |
chown [用户:组] [文件] | 改所有者与属组 |
网络
| 命令 | 说明 |
|---|---|
ping | 连通性测试 |
ifconfig / ip addr | 网卡与 IP、MAC |
netstat -tuln / ss -tuln | 监听端口(ss 通常更快) |
curl [URL] | HTTP;curl -O [URL] 下载 |
wget [URL] | 下载;wget -c 断点续传 |
压缩与解压
shell
# 打包并压缩(gzip)
tar -zcvf [包名].tar.gz [文件或目录]
tar -zxvf [包名].tar.gz
# zip
zip [包名].zip [文件]
unzip [包名].zip其他常用
| 命令 | 说明 |
|---|---|
grep [关键词] [文件] | 搜索;-i 忽略大小写,-r 递归目录 |
echo [内容] | 输出;> 覆盖,>> 追加重定向到文件 |
man [命令] | 手册;[命令] --help 简版帮助 |
history | 历史命令;!n 执行第 n 条 |
三、Shell 脚本:创建与执行
Shell 脚本是包含一系列 Shell 命令的文本文件,由解释器(如 bash、sh、zsh)逐行执行,无需编译。
创建脚本的一般步骤
shell
# 通常使用 .sh 后缀(非强制,只是便于识别)
touch script.sh
# 赋予执行权限(若要用 ./script.sh 方式运行)
chmod +x script.sh # 或 chmod 750 script.sh(仅属主/组可执行,更安全)
# 编辑首行:指定解释器(shebang)
#!/bin/bash # 使用 bash(功能多)
#!/bin/sh # 使用 sh(兼容性往往更好,功能较少)执行方式
shell
# 方式一:可执行权限 + 路径执行
chmod +x script.sh
./script.sh
# 方式二:显式指定解释器(可不 chmod +x)
bash script.sh
sh script.sh脚本参数(位置参数)
在脚本内部可用下列特殊变量获取命令行参数:
| 变量 | 含义 |
|---|---|
$0 | 脚本名(含路径时即为调用形式) |
$1~$9 | 第 1~9 个参数 |
${10} 及以上 | 第 10 个起必须用 ${n},不能写 $10(会被解析为 $1 加字符 0) |
$# | 参数个数 |
$* | 所有参数(一个整体) |
$@ | 所有参数(独立单词,常配合 "$@" 使用) |
$? | 上一条命令的退出状态(0 成功,非 0 失败) |
$$ | 当前脚本进程 PID |
示例脚本:
shell
echo "脚本名:$0"
echo "参数1:$1"
echo "参数总数:$#"
echo "所有参数:$@"执行 ./script.sh a b c 时,输出大致为:
text
脚本名:./script.sh
参数1:a
参数总数:3
所有参数:a b c补充说明
可移植性:若目标环境只有
/bin/sh,脚本应避免 Bash 独有语法,或在 shebang 中固定bash并确保目标机已安装。安全:涉及路径、用户输入时,变量尽量加引号,例如
"$1",避免空格与换行造成意外拆分。下一章:变量与数据类型:字符串、数字与数组。
运维向脚本范例:安全、告警与系统初始化 起的「运维脚本示例」子目录。
