shell-shell编程基础
向脚本中传递参数
shell 脚本传参方式是,直接在执行脚本时,在后面以空格连接变量即可。
$#
用来代表传入脚本参数个数;$@` 代表所有参数的内容。
shell 编程中的参数引用
引用参数 | 描述 |
---|---|
0,1,2… | 位置参数。从参数 0 开始,参数 0 代表启动脚本的程序名称。1代表第一个参数,2代表第二个参数。。。 |
* | 以一个单字符串显示所有向脚本传递的参数。 |
@ | 从参数 1 开始,显示所有向脚本传递的参数。 |
# | 参数数量(不包含参数 0) |
$ | 脚本运行的当前进程 ID 号 |
! | 后台运行的最后一个进程 ID 号 |
? | 显示最后命令的退出状态 |
- | 显示 shell 使用的当前选项,与 set 命令功能相同 |
注: 如果传入脚本的参数多于 9 个,则不能通过使用 $10
来引用第 10 个参数。必须处理或保存第一个参数($1),然后使用 shift
命令删除参数 1,并将所有剩余的参数下移一位,因此 $10
就变成了 $9
,以此类推。
mv
描述
移动或重命名文件或目录。
mkdir
描述
创建一个或多个新的目录。
I/O 重定向
是程序,总难免输入输出。程序与外界的交互是程序功能强大与灵活的必要条件。
标准输入(0)、标准输出(1)与标准错误(2)
cat
描述
连接或显示文件。
注: 不要使用重定向符号 >
将输出重定向到输入文件之一。如果这么做,会丢失输入文件中的原始数据。
管道与重定向
shell 提供一下基本方法和标记,来改变默认输入端和输出端。
以
>
改变标准输出Command > file
将 command 的标准输出重定向到指定文件中,而不是打印到控制台上:1
2
3$ echo "redirect to file." > /tmp/a.txt
$ cat /tmp.a.txt
redirect to file.以
<
改变标准输入Command < file
将 command 的标准输入想改为 file。1
2
3$ cat < /tmp/a.txt > /tmp/b.txt
$ cat /tmp/b.txt
redirect to file.以
>>
追加文件Command >> file
可将 command 的输出追加到文件 file 末尾。1
2
3
4$ echo "update a.txt" >> /tmp/a.txt
$ cat /tmp/a.txt
redirect to file.
update a.txt以
|
建立管道Command1 | Command2
将 command1 的标准输出与 command2 的标准输入相连。1
2$ head -n10 /etc/passwd | grep "root"
root:x:0:0:root:/root:/bin/bash注: 管道的数据共享在 Linux 内核是通过内存拷贝实现的。相较于 CPU 的运算,数据的移动往往更加耗时。
head
描述
显示一个文件或多个文件的前几行或前几个字节。
文件描述符
内核(kernel)利用文件描述符来访问文件。文件描述符是非负整数。
特殊文件的妙用
LInux 系统中有一些神奇的文件,例如 /dev/null
、/deb/zero
、 /dev/tty
。
/dev/null
/dev/null
像一个黑洞,所有写入他的内容都会永久消失。/dev/zero
/dev/zero
的主要用途是用来创建一个指定长度,并且初始化为空的文件,这种文件一般被用作临时交换文件懊恼。/dev/tty
/dev/tty
是一个很实用的文件。当程序打开这个文件时,UNIX/Linux 会自动将它重定向到当前所出的终端。基本文本检索(grep)
Linux 设计中有这样一个关键思想——“一切皆文件”。
grep 命令检索文本
grep
命令提供在文本中检索特定字符串的方法,并且支持正则表达式。grep
命令常与管道连用,用于在文本流中过滤出符合条件的文本行。
UNIX/Linux 系统的设计与 shell 编程
一切皆文件
ls
描述
显示目录内容。
UNIX 编程的基本原则
KISS
Keep It Simple,Stupid!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!