命令与脚本:终端、会话与日常操作 · 编写交互脚本、复用历史与安排执行
编写交互脚本、复用历史与安排执行
read 接收输入,echo/print 输出,eval 重新解释参数;大括号、历史编辑、信号处理、延迟与定时执行按相关语法相邻查阅。
read · 从标准输入(或文件)读取一行并将单词分配给变量
更多信息:https://www.gnu.org/software/bash/manual/bash.html#index-read。
- 读取键盘输入的数据赋值给变量:
read {{变量}}- 把读取的一行按 IFS 分词后依次存入数组(不是逐行累积):
read -a {{数组}}- 指定要读取的字符数,将数据赋值给变量:
read -n {{字符数}} {{变量}}- 将多个数据依次赋值给多个变量:
read {{_ 变量1 _ 变量2}} <<< "{{The surname is Bond}}"- 读取键盘输入的数据赋值给变量,不对
\进行转义:
read -r {{变量}}- 键盘输入前显示提示语:
read -p "{{提示语:}}" {{变量}}- 静默模式(如果输入来自终端,则不回显字符)读取键盘输入的数据赋值给变量:
read -s {{变量}}- 从标准输入读取每一行进行操作:
while read line; do {{echo|ls|rm|...}} "$line"; done < {{标准输入|路径/到/文件|...}}echo · 输出给定参数
另请参阅:
printf。 更多信息:https://www.gnu.org/software/coreutils/manual/html_node/echo-invocation.html。
- 输出文本信息. 注意: 引号是可选的:
echo "{{Hello World}}"- 输出带有环境变量的信息:
echo "{{My path is $PATH}}"- 打印不带尾随换行符的信息:
echo -n "{{Hello World}}"- 向文件添加信息:
echo "{{Hello World}}" >> {{file.txt}}- 启用反斜杠转义的解释(特殊字符):
echo -e "{{Column 1\tColumn 2}}"- 输出执行的上一条指令的退出状态(注:在 Windows 命令提示符和 PowerShell 中,对应的命令分别是
echo %errorlevel%和$lastexitcode):
echo $?print · Z Shell (zsh) 内置。打印参数,类似于 echo
另请参阅:
echo,printf,zsh。 更多信息:https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html。
- 打印输入:
print "文本1" "文本2"- 以换行符分隔打印:
print -l "第一行" "第二行" "第三行"- 不带尾随换行符打印:
print -n "文本"; print "文本2"- 启用反斜杠转义:
print -e "第一行\n第二行"- 按照
printf所述打印参数(为了在 shell 之间实现更好的可移植性,请考虑改用printf命令):
print -f "%s 今年 %d 岁了。\n" "小明" 30其他同名命令的文档入口:
- 查看 Zsh 内置命令的文档:
tldr print.zsh- 查看
run-mailcap的print别名的文档:
tldr {{[-p|--platform]}} linux run-mailcap- 查看在 Windows 上打印文本文件的文档:
tldr {{[-p|--platform]}} windows print.win{ · 多用途 shell 语法
- 隔离变量名:
echo ${{{HOME}work}}- 使用大括号展开序列:
echo {{{1..3}}} {{{a..c}}}{{{dir1,dir2,dir3}}}- variable 已设置且非空时展开后面的文本:
echo ${{{variable:+variable is set and contains $variable}}}- variable 未设置或为空时展开默认值(不修改变量本身):
echo ${{{variable:-default}}}- 返回
variable的字符长度:
echo ${{{#variable}}}- 返回字符串切片:
echo ${{{variable:3:7}}}- 间接展开:把 variable 的值当作另一个变量名读取:
echo ${{{!variable}}}- 将命令输出分组在一起:
{ {{command1; command2; ...}} } | {{another_command}}闭合大括号 } 与上面的 { 配对使用,参见 大括号的具体用法。
fc · 打开最近的命令进行编辑,然后运行它
另请参阅:
history。 更多信息:https://www.gnu.org/software/bash/manual/bash.html#index-fc。
- 在默认系统编辑器中打开最后一个命令,并在编辑后运行:
fc- 指定一个编辑器打开:
fc -e '{{emacs}}'- 从历史记录中列出最近的命令:
fc -l- 以相反的顺序列出最近的命令:
fc -l -r- 从历史记录中编辑并运行一个命令:
fc {{编号}}- 编辑并运行指定区间内的命令:
fc '{{416}}' '{{420}}'- 显示帮助:
fc --helpeval · 在当前 shell 中以单个命令的形式执行参数,并返回其结果
更多信息:https://www.gnu.org/software/bash/manual/bash.html#index-eval。
- 使用 'foo' 做为参数调用
echo:
eval "{{echo foo}}"- 在当前 shell 程序中设置变量:
eval "{{foo=bar}}"trap · 在接收到事件时执行命令
可用于对用户中断或其他操作执行清理。 更多信息:https://manned.org/trap.1posix。
- 列出命令和预期事件的名称:
trap- 在接收到信号时执行命令:
trap 'echo "捕获到信号 {{SIGHUP}}"' {{HUP}}- 移除命令:
trap - {{HUP}} {{INT}}seq · 打印数字序列到标准输出
更多信息:https://www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html。
- 从 1 到 10 的序列:
seq 10- 从 5 开始,3 为步长,不超过 20 的序列:
seq 5 3 20- 从 5 开始,3 为步长,不超过 20 的序列,并用空格作为分隔符:
seq {{[-s|--separator]}} " " 5 3 20- 从 5 开始,3 为步长,不超过 20 的序列,并格式化为 4 位宽度,不足 4 位,前面补 0:
seq {{[-f|--format]}} "%04g" 5 3 20yes · 重复输出某些内容
此命令通常用于对安装命令(如
apt-get)每个提示回答是。 更多信息:https://www.gnu.org/software/coreutils/manual/html_node/yes-invocation.html。
- 重复输出“y”:
yes- 重复输出“消息”:
yes {{消息}}- 接受
apt-get命令的所有提示:
yes | sudo apt-get install {{程序}}- 重复输出一个换行符以始终接受提示的默认选项:
yes ''sleep · 延迟指定的一段时间
更多信息:https://manned.org/sleep。
- 按秒数延迟:
sleep {{seconds}}- 在20秒延迟后执行指定命令:
sleep 20 && {{command}}at · 在稍后时间执行命令
结果将被发送到用户的邮箱。 更多信息:https://manned.org/at。
- 交互式创建命令并在 5 分钟后执行(完成后按
<Ctrl d>):
at now + 5 minutes- 交互式创建命令并在特定时间执行:
at {{小时:分钟}}- 在下一个 10:00 AM 执行从标准输入提交的命令(当天已过该时刻时通常安排到次日):
echo "{{命令}}" | at 1000- 在下周二晚上 9:30 从指定文件执行命令:
at -f {{路径/到/文件}} 9:30 PM Tue- 列出当前用户的所有待执行任务(等同于
atq):
at -l- 查看指定任务:
at -c {{任务编号}}just · just 可以指代多个具有相同名称的命令
- 查看命令运行器的文档:
tldr just.1- 查看 V8 JavaScript 运行时的文档:
tldr just.js继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置