目录教材为Shell脚本学习指南(O'REILY)
#2021/5/14 # #!的作用 #例:假设一个脚本/home/learning/shell/nusers #第一行#! /bin/bash -,内核解释这行命令后便会以如下方式引用bash: #/bin/bash /home/learning/shell/nusers #-表示没有shell选项,基于安全上的考虑,可避免一定程度的欺骗性攻击
#不需要参数的选项可以合并例如: #rm -fr
#! /bin/bash - # myvar # 变量测试 myvar=this_is_a_long_string_that_not_mean_much first=isaac middle=bashevis last=singer fullname="isaac bashevis singer" oldname=$fullname echo $oldname fullname="$first $middle $last" echo $fullname echo $myvar
[root@localhost shell]# ./myvar isaac bashevis singer isaac bashevis singer this_is_a_long_string_that_not_mean_much
略(p29-32)
软件设计原则里的重要概念:程序应该有数据的来源端、数据的目的端以及报告问题的地方,它们分别被称为标准输入、标准输出以及标准错误输出。
读取标准输入、写入标准输出,并将错误信息传递到标准错误输出的一类程序常叫做过滤器(filter)
默认的标准输入、标准输出都是终端,这点可通过cat程序得知
[root@localhost shell]# cat now is the time now is the time for all good men for all good men to come to the aid of thier country to come to the aid of thier country ^D Ctrl-D,文件结尾
是谁替执行中的程序初始化标准输入、输出及错误输出的呢?
答案就是在你登录时,UNIX便将默认的标准输入、输出及错误输出安排成你的终端。
I/O重定向就是你通过与终端交互,或是在Shell脚本里设置,重新安排从哪里输入或输出到哪里
cat
[root@localhost shell]# cat --help 用法:cat [选项]... [文件]... 连接所有指定文件并将结果写到标准输出。 如果没有指定文件,或者文件为"-",则从标准输入读取。 -A, --show-all 等效于 -vET -b, --number-nonblank 对非空输出行编号,同时取消 -n 选项效果 -e 等效于 -vE -E, --show-ends 在每行结束处显示"$" -n, --number 对输出的所有行编号 -s, --squeeze-blank 不输出多行空行 -t 与 -vT 等效 -T, --show-tabs 将跳格字符显示为^I -u (被忽略) -v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外 --help 显示此帮助信息并退出 --version 显示版本信息并退出 示例: cat f - g 先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。 cat 将标准输入的内容复制到标准输出。 GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> Full documentation <https://www.gnu.org/software/coreutils/cat> 或者在本地使用:info '(coreutils) cat invocation'