如果你希望自动执行常规任务并使你的生活更轻松,那么使用 Shell 脚本是一个很好的选择。本文将向你介绍一些基本概念,这些概念将帮助你编写高效的 Shell 脚本。
Shell 脚本是一种被设计用来运行命令行解释器 UNIX Shell 的计算机程序。Shell 脚本的各类变种被视作脚本语言。Shell 脚本执行的典型操作包括文件操作、程序执行和文本打印。设置环境、运行程序并执行任何必要的清理或日志记录的脚本称为封装。
你可以通过查看终端窗口中的提示符符号来识别 Linux 系统的计算机上的 Shell 命令提示符的用户是普通用户还是超级用户。#
符号用于超级用户,$
符号用于具有标准权限的用户。
脚本附带了很多可以在终端窗口上执行的、用以管理您的计算机的命令。每个命令的详细信息可以在该命令附带的使用手册中找到。你可以使用如下命令来查看手册:
man
一些常用的命令有:
date # 显示当前日期和时间
cal # 显示当前月份日历
df # 显示磁盘使用情况
free # 显示内存使用情况
ls # 列出文件和目录
mkdir # 创建目录
每个命令都附带了几个可以一起使用的选项。你可以参考使用手册以了解更多的细节。man date
的输出如图 1 所示。
当你希望捕获文件中的命令输出或重定向到文件时,可以使用重定向操作符。
命令 | 描述 |
---|---|
ls -l /usr/bin >file | 默认标准输出到文件 |
ls -l /usr/bin 2>file | 重定向标准错误到文件 |
ls -l /usr/bin > ls-output 2>&1 | 重定向标准错误和标准输出到文件 |
ls -l /usr/bin &> ls-output | 重定向标准错误和标准输出到文件 |
ls -l /usr/bin 2> /dev/null | 写入 /dev/null ,丢弃输出 |
大括号扩展是 UNIX 提供的强大选项之一。它有助于在一行指令中使用最少的命令完成大量操作。例如:
$echo Front-{A,B,C}-Back
Front-A-Back, Front-B-Back, Front-C-Back
$echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
$mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}
这条命令会为 2009 到 2011 年里的每个月建立一个目录。
环境变量是一个动态命名的值,它可以影响计算机上运行的进程的行为方式。此变量是进程运行环境的一部分。
命令 | 描述 |
---|---|
printenv | 打印出所有环境变量的值。 |
set | 设置 Shell 选项 |
export | 导出环境到随后执行的程序 |
alias | 为命令创建别名 |
网络命令对于排查网络问题和检查连接到客户机的特定端口非常有用。
命令 | 描述 |
---|---|
ping | 发送 ICMP(网际网路控制讯息协定)数据包 |
traceroute | 打印数据包在网络中的路径 |
netstat | 打印网络连接信息、路由表、接口数据 |
ftp /lftp | 互联网文件传输程序 |
wget | 非交互式网络下载器 |
ssh | OpenSSH SSH 客户端 (远程登录程序) |
scp | 安全拷贝 |
sftp | 安全文件传输程序 |
grep
命令用于查找系统和日志中的错误。它是 Shell 拥有的强大工具之一。
命令 | 描述 |
---|---|
grep -h '.zip' file.list | . 表示任意字符 |
grep -h '^zip' file.list | 以 zip 开头 |
grep -h 'zip |