声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:shell编程(完结)_哔哩哔哩_bilibili
本文主要讲解不同shell脚本中的相互调用以及输入输出重定向操作。
一、不同脚本之间的相互调用
在 Shell 脚本中,不同脚本之间的相互调用是一个常见的需求。以下是几种典型的调用方式及使用场景:
1.使用.命令调用
创建 1.sh
:
vim 1.sh
输入以下内容后保存:
echo "hello world!"
创建 2.sh
:
vim 2.sh
输入以下内容后保存:
. 1.sh
执行 2.sh
:
bash 2.sh
运行结果:
hello world!
2.使用source命令调用
创建 3.sh
:
vim 3.sh
输入以下内容后保存:
echo "hello TOM!"
创建 4.sh
:
vim 4.sh
输入以下内容后保存:
source 3.sh
执行 4.sh
:
bash 4.sh
运行结果:
hello TOM!
3.变量之间的调用
创建 5.sh
:
vim 5.sh
输入以下内容后保存:
name="Bob"
age=22
创建 6.sh
:
vim 6.sh
输入以下内容后保存:
source 5.sh
echo "my name is $name and my age is $age years old"
执行 6.sh
:
bash 6.sh
运行结果:
二、文本重定向
文本重定向是 Shell 中非常常用的功能,用于将命令的输出或输入从默认位置(如终端)重定向到文件或其他目标。以下是文本重定向的主要用法及示例:
文件描述符编号
文件描述符 | 名称 | 描述 |
---|---|---|
0 | 标准输入(stdin) | 默认从键盘读取输入,使用 < 重定向标准输入到文件。 |
1 | 标准输出(stdout) | 默认将输出显示到终端,使用 > 或 >> 将标准输出重定向到文件。 |
2 | 标准错误(stderr) | 默认将错误消息显示到终端,使用 2> 或 2>> 将错误输出重定向到文件。 |
1. 输出重定向(> 和 >>)
用法:
>
:将输出写入文件(覆盖模式)。>>
:将输出追加到文件末尾(追加模式)。
示例:
覆盖写入文件:
echo "hello world" > 1.sh
- 将
hello world
写入1.sh
,若文件已存在会被覆盖。
追加写入文件:
echo "good morning,Bob" >> 1.sh
- 将
good morning,Bob
追加到1.sh
文件末尾。
2. 输入重定向(<)
用法:
<
:从文件读取输入。
示例:
从文件中读取输入:
文件 1.txt
内容如下:
/root
/home
执行以下命令:
xargs ls -l < 1.txt
输出:
/home:
total 0
drwx------ 4 admin admin 110 Nov 5 16:26 admin
drwx------ 2 www www 62 Nov 5 16:49 www/root:
total 62564
-rw-r--r-- 1 root root 30 Nov 24 21:07 1.sh
-rw-r--r-- 1 root root 0 Nov 22 23:08 1.txt
-rw-r--r-- 1 root root 7 Nov 24 20:04 2.sh
-rw-r--r-- 1 root root 20 Nov 24 20:28 3.sh
-rw-r--r-- 1 root root 12 Nov 24 20:28 4.sh
-rw-r--r-- 1 root root 18 Nov 24 20:32 5.sh
-rw-r--r-- 1 root root 65 Nov 24 20:33 6.sh
-rw-r--r-- 1 root root 2972450 Nov 17 00:44 7.0.0.tar.gz
-rw-r--r-- 1 root root 97 Nov 23 02:48 a.sh
-rw-r--r-- 1 root root 59383631 Aug 11 2023 docker-compose-linux-x86_64.1
-rw-r--r-- 1 root root 63 Nov 23 02:24 f.sh
-rw-r--r-- 1 root root 204 Nov 22 22:38 g.sh
-rw-r--r-- 1 root root 49359 Nov 4 09:56 install.sh
-rw-r--r-- 1 root root 319 Nov 23 00:26 k.sh
-rw-r--r-- 1 root root 104 Nov 23 01:11 l.sh
drwxr-xr-x 5 root root 90 Nov 4 09:25 ProxyCat-main
-rw-r--r-- 1 root root 1583662 Nov 18 19:50 ProxyCat.zip
drwxrwxr-x 8 root root 4096 Nov 17 02:04 redis-7.0.0
-rw-r--r-- 1 root root 186 Nov 23 02:16 r.sh
-rw-r--r-- 1 root root 103 Nov 23 01:59 t.sh
-rw-r--r-- 1 root root 82 Nov 23 01:17 u.sh
drwxr-xr-x 12 root root 4096 Nov 21 19:01 vulfocus
-rw-r--r-- 1 root root 553 Nov 22 23:27 y.sh
- xargs 从标准输入读取内容(这里是 1.txt)。
- 将读取到的内容作为参数传递给 ls -l,ls -l 会分别列出 /root 和 /home 目录的详细信息。
3.错误重定向(2> 和 2>>)
用法:
- 2>:将错误输出写入文件(覆盖模式)。
- 2>>:将错误输出追加到文件末尾(追加模式)。
示例:
覆盖错误输出:
ggb 2> 1.txt
- 错误命令的报错信息写入
1.txt,
若文件已有内容在会被覆盖。
追加错误输出:
ggc 2>> 1.txt
- 错误命令的报错信息追加到
1.txt
。