ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

第三章、shell语法 文件重定向 引入外部脚本

2022-07-10 10:37:36  阅读:183  来源: 互联网

标签:shell 第三章 重定向 vivo echo base xyg test name


第三章、shell语法 文件重定向 引入外部脚本

文件重定向

linux中每个进程默认打开3个文件描述符

  • stdin 标准输入从命令行中读取字符,文件描述符为 0
  • stdout 标准输出向命令行中输出字符,文件描述符为1
  • stderr 标准错误输出向命令行中输出错误信息,文件描述符为2

我们可以通过文件重定向将文件描述符和文件产生联系

符号 作用
command_name < file_name stdout重定向到file_name
command_name > file_name stdin以覆盖的形式重定向到file_name
command_name >> file_name stdin以追加的形式重定向到file_name
command_name n> file_name 将文件描述符n以覆盖的形式重定向到file_name
command_name n>> file_name 将文件描述符n以追加的形式重定向到file_name

示例

(base) xyg@vivo-xyg:~$ echo -e '\thello'    # 查看单引号效果
        hello
(base) xyg@vivo-xyg:~$ echo "\thello"    # 查看双引号,但是不使用-e效果
\thello 
echo -e "hello \c" > read.txt   # 这里首先,可以单引号,也可以双引号,而且也可以不使用\c使用-n表示不换行
echo "world" >> read.txt

echo < read.txt    # echo 好像无法接受文件重定向, 无法输出

read text < read.txt    # 可以正常读取数据输出
echo "${text}"

问题,为什么 echo 无法输出文件标准输入重定向的数据
输出结果

(base) xyg@vivo-xyg:~/xyg/test$ ./test.sh

hello world

同时重定向stdin和stdout
text.sh脚本

#! /bin/bash

read a
read b

echo "$a + $b = $(expr $a + $b)"

调用脚本

(base) xyg@vivo-xyg:~/xyg/test$ ls
1.txt  2.txt  read.txt  test.sh
(base) xyg@vivo-xyg:~/xyg/test$ echo -e "1\n8" > read.txt    # read.txt 是 stdin 重定向文件
(base) xyg@vivo-xyg:~/xyg/test$ ./test.sh < read.txt > output.txt    # 同时 stdin stdout 重定向
(base) xyg@vivo-xyg:~/xyg/test$ cat output.txt # 查看 stdout 重定向结果
1 + 8 = 9
(base) xyg@vivo-xyg:~/xyg/test$ 

引入外部脚本

类似于C/C++中的include操作,bash也可以引入其他文件中的代码。
语法格式:

# 语法格式1
. bash_name  # 注意点和文件名之间有一个空格

# 语法格式2
source bash_name
#! /bin/bash


declare -x global_var='xingyouguang'    # 测试全局变量和普通变量的区别
normal_var='xyg'
(base) xyg@vivo-xyg:~/xyg/test$ echo $normal_var    # 运行脚本前测试是否存在变量

(base) xyg@vivo-xyg:~/xyg/test$ echo $global_var    # 运行脚本前测试是否存在变量


(base) xyg@vivo-xyg:~/xyg/test$ ./test.sh           # ./bash_name 普通运行脚本
(base) xyg@vivo-xyg:~/xyg/test$ echo $global_var    # 查看变量是否存在,仍旧不存在是因为 global_var 全局针对的是子进程

(base) xyg@vivo-xyg:~/xyg/test$ echo $normal_var    # 查看变量是否存在

(base) xyg@vivo-xyg:~/xyg/test$ cat test.sh         # 确认脚本文件
#! /bin/bash


declare -x global_var='xingyouguang'
normal_var='xyg'
(base) xyg@vivo-xyg:~/xyg/test$ source test.sh     # source 引入外部脚本
(base) xyg@vivo-xyg:~/xyg/test$ echo $global_var   # 变量已经生效
xingyouguang    
(base) xyg@vivo-xyg:~/xyg/test$ echo $normal_var   # 变量已经生效
xyg

参考文献

强烈推荐 Y 总的 linux 基础课
linux教程-孟庆昌

标签:shell,第三章,重定向,vivo,echo,base,xyg,test,name
来源: https://www.cnblogs.com/lucky-light/p/16462671.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有