YSYX学习记录(六)

发布于:2025-05-26 ⋅ 阅读:(29) ⋅ 点赞:(0)

网络、文本处理工具与 Shell 脚本

I/O 重定向与管道

重定向

(这不是C语言的内容吗,果然学到后面就会有相通的地方是吧!!)

$ echo "Hello Linux!" > output_file # 将输出写入到文件(覆盖原有内容)
$ cat output_file
Hello Linux!
$ echo "rewrite it" > output_file
$ cat output_file # 可以看到原来的 Hello Linux! 被覆盖了。
rewrite it
$ echo "append it" >> output_file # 将输出追加到文件(不会覆盖原有内容)
$ cat output_file
rewrite it
append it

管道

(好熟悉!!!好像之前和正则表达式一起学的)

 例子:

$ ls / | grep bin  # 筛选 ls / 输出中所有包含 bin 字符串的行
bin
sbin

网络下载

为何使用 wget 和 cURL(只用过wget,,,)

wget

curl

但 cURL 由于可自定义各种请求参数,所以在模拟 web 请求方面更擅长;wget 由于支持 FTP 协议和递归遍历,所以在下载文件方面更擅长。

文本处理

在进行文本处理时,我们有一些常见的需求:

  • 获取文本的行数、字数
  • 比较两段文本的不同之处
  • 查看文本的开头几行和最后几行
  • 在文本中查找字符串
  • 在文本中替换字符串

下面介绍如何在 shell 中做到这些事情

文本统计:wc

文本比较:diff

文本开头与结尾:head & tail

示例:

$ head file  # 显示 file 前 10 行
$ head -n 25 file  # 显示 file 前 25 行
$ head -25 file  # 显示 file 前 25 行
$ head -c 20 file  # 显示 file 前 20 个字符
$ tail -10 file  # 显示 file 最后 10 行

 文本查找:grep

$ grep 'hello' file  # 查找文件 file 中包含 hello 的行
$ ls | grep 'file'  # 查找当前目录下文件名包含 file 的文件
$ grep -i 'Systemd' file  # 查找文件 file 中包含 Systemd 的行(忽略大小写)
$ grep -R 'hello' .  # 递归查找当前目录下内容包含 hello 的文件

文本替换:sed

$ sed 's/hello/world/g' file  # 将文件 file 中的 hello 全局(global)替换为 world 后输出
$ sed 's/hello/world/' file  # 将文件 file 的每一行第一个出现的 hello 替换为 world 后输出
$ echo 'helloworld' | sed 's/hello/world/g'  # 管道也是可以的
$ sed -i 's/hello/world/g' file  # -i 参数会直接写入文件,操作前记得备份哦!
$ sed -i.bak 's/hello/world/g' file  # 当然,也可以让 sed 帮你备份到 file.bak

Shell 脚本

bash

使用 . 命令执行脚本会在当前 shell 中执行脚本,而不是新建一个 shell 去执行脚本。这意味着,脚本中的变量赋值、函数定义以及切换目录(cd 命令)等变化都会在当前 shell 中生效。

shell 变量

用户自定义变量

变量定义:name=串,其中 = 两边不允许有空格。如果字串中含空格,就要用双引号括起。在引用时,使用 $name 或 ${name},后者花括号是为了帮助解释器识别变量边界。

已定义的变量可以通过 unset name 来删除

tips:

环境变量

关于环境变量点击链接

位置变量

(预定义变量中的一类),位置参数变量可以向Shell脚本中传递各个位置的参数。(用来给脚本传参数)

特殊变量

变量输入与输出

输入:read

$ name=""
$ read -p "Enter your name: " name  # 输出提示,然后从输入读取一个值,存储到 $name 中
Enter your name: linux
$ echo $name
linux

输出:

echo

printf

算术运算

条件表达式(数值比较(大于小于)、文件状态(是否可读))

流程控制(if  case等等)

函数

shell脚本调试


网站公告

今日签到

点亮在社区的每一天
去签到