一些 Shell 脚本的基本概念
创始人
2024-03-02 12:26:33
0

如果你希望自动执行常规任务并使你的生活更轻松,那么使用 Shell 脚本是一个很好的选择。本文将向你介绍一些基本概念,这些概念将帮助你编写高效的 Shell 脚本。

Shell 脚本是一种被设计用来运行命令行解释器 UNIX Shell 的计算机程序。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非交互式网络下载器
sshOpenSSH SSH 客户端 (远程登录程序)
scp安全拷贝
sftp安全文件传输程序

grep 命令

grep 命令用于查找系统和日志中的错误。它是 Shell 拥有的强大工具之一。

命令描述
grep -h '.zip' file.list. 表示任意字符
grep -h '^zip' file.listzip 开头
grep -h 'zip$' file.listzip 结尾
grep -h '^zip$' file.list只含有 zip
grep -h '[^bz]zip' file.list不含 bz
grep -h '^[A-Za-z0-9]' file.list所有文件名有效的文件

量词

下面是一些量词的例子:

命令描述
?匹配出现 0 次或 1 次的元素
*匹配出现 0 次或多次的元素
+匹配出现 1 次或多次的元素
{}匹配出现特定次数的元素

文本处理

文本处理是当今 IT 世界中的另一项重要任务。程序员和管理员可以使用这些命令来切片、剪切和处理文本。

命令描述
cat -A $FILE显示 $FILE 文件的所有内容
sort file1.txt file2.txt file3.txt > final_sorted_list.txt一次性将所有文件排序
`ls - lsort -nr -k 5`
sort --key=1,1 --key=2n distor.txt对第 1 列进行排序(默认按字母表顺序),对第 2 列进行数值排序
`sort foo.txtuniq -c`
cut -f 3 distro.txt剪切第 3 列
cut -c 7-10剪切 7 - 10 字符
cut -d ':' -f 1 /etc/password分隔符 :
sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distro.txt按第 3 列第 7 个字符、第 3 列第 1 个字符和第 3 列第 4 个字符排序
paste file1.txt file2.txt > newfile.txt合并两个文件
join file1.txt file2.txt按公共字段连接两个文件

窍门和技巧

在 Linux 中,我们可以通过使用简单的命令或控制选项返回到命令的历史记录。

命令描述
clear清空屏幕
history查看保存命令的历史记录
script filename捕获文件中的所有命令执行

一些历史命令的技巧:

  • CTRL + R: 搜索命令历史
  • !!number:执行编号为 number 的命令
  • !! :执行上一条命令
  • !?string : 执行包含 string 的上一条命令
  • !string:执行以 string 开始的上一条命令
  • export HISTCONTROL=ignoredups: 忽略重复条目
  • export HISTSIZE=10000:设置存储的历史行数

随着你对 Linux 命令逐渐熟悉,你将能够编写封装脚本。所有手动任务,如定期备份、清理文件、监控系统使用情况等,都可以使用脚本自动完成。在学习高级概念之前,本文将帮助您开始编写脚本。


via: https://www.opensourceforu.com/2022/05/the-basic-concepts-of-shell-scripting/

作者:Sathyanarayanan Thangavelu 选题:lkxed 译者:FYJNEVERFOLLOWS 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

大数据开发中常用的shel...
内容目录一、date二、find三、awk四、cut五、if六、s...
2025-05-31 22:29:07
shell常见面试题二
(8)、shell中case语法 #!...
2025-05-30 22:47:54
Shell 的变量功能
什么是变量?? 应该很好理解吧&#x...
2025-05-30 15:50:47
shell常见面试题三
(16)、read读取终端输入 &#x...
2025-05-30 13:17:49
Web漏洞-XSS跨站之订...
一、XSS盲打可测试位置留言板、评论区、订单系统、反馈条件等位置。...
2025-05-29 08:31:04
shell命令如何正确调用...
前言 本文是该专栏的第20篇,后面会持续分享python的各种干...
2025-05-29 06:53:20

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...