Shell编程
Shell既是Linux的命令解释程序,又是一种程序设计语言。
shell的主要功能
一 alias功能
alias指令,单纯输入的话,可以显示现有的所有的指令的别名。
具体格式 alias[别名]=[指令名称]
如alias lll="ls"
如果想要删除这个别名的话,那么久unalias 别名
二 如何使用shell脚本
三 shell中的特殊字符
# 和Python一样,之后的代码变成注释
& |
在后台执行进程。 |
* |
匹配任意长度的字符串。 |
? |
匹配单个字符。 |
[ ] |
匹配方括号中的任何一个字符。 |
[! ] |
匹配不在方括号中的任何一个字符。 |
\ |
转义字符,使特殊字符失去其特殊含义。 |
; |
命令分隔符。 |
四 输入输出重定向
有关的四个符号分别为 >和>>和<和<<
输出重定向
如果希望命令的执行结果保存到一个文件中而不是在屏幕上输出。
$ 命令 > 文件名
比如gcc 1.c ./a.out > 2.c 1.c的输出结果就会出现在2.c这个文件中
一个用法,如果想要将当前目录下的所有文件名输入到一个文件xx中,可以 $ ls > xx
>>和>的用法区别。很明显,>使用过一次之后就会覆盖该文件原有的输出结果。
使用>>可以将结果添加到该文件的结尾的位置。
比如合并两个文件的操作。w1,和w2合并到myfile
cat w1 > myfile #cat 可以一次显示一个文件的所有的内容。
cat w2 >>myfile
输入重定向
一般格式为
举一个例子 介绍一下 wc命令
wc [选项] [文件名],可以统计一个文件的字节数,单词数,行数
选项 -c ,-w,-l,分别对应。没有选项的话就三个都输出。
使用输入重定向完成这个指令,如统计myfile的行数
代码为$wc -l < myfile
here文件和<<
能够将分割符之间的作为输入传递给命令
下例将一对分隔符“!”之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。 $ wc << ! this text forms the content of the here document, which continues until the end of text delimiter. ! 4 17 98
将错误输出重定向
读取到 2>的时候就会把错误输出重定向了。
为运行程序myprog并把错误信息输出重定向到myfile,
可以 myprog 2> myfile
五 管道及组合命令
一个命令行如果有多条命令的话,需要用分割符;分割开。
1 管道
将一个命令的输出作为输入传递到下一个命令 , | 即为管道
$ 命令1 | 命令2 #即将命令1的输出作为输入给命令2
这个例子讲的很清楚了。
利用管道操作符连起来就形成了管道线。管道线每个命令都作为一个单独的进程。
2 命令的执行次序
不同的分割符会产生不同的命令执行次序
下面就四种分割符作说明。
1. ; 即最常见的分号,命令按前后执行
2. & 表示在后台进行的命令
3. && 逻辑执行,只有前面的命令执行成功了,才能继续去执行后面的命令
4. || 逻辑执行 , 先执行前面的命令,之后前面的失败了,才会去执行后面的命令。
5 | 管道符号,前面已经说明过了。
Linux中各种命令分割符的优先级如下。
1. && 和 || 优先级最高,且相同。其他分割符优先级相同。
2.优先级相同的情况下,从左到右执行命令。
分析如下代码
date; pwd
cat temp >> file &
cp f1,f2 && rm f1
cat abc|| pwd
3 shell的命令组合
1 用{}将命令结合在一起
命令组在本shell内执行,不产生新的进程。
2 用()将命令结合在一起
生成一个子进程来执行命令
例:
六 shell 变量
赋值形式上区分,shell不支持数据类型
同python,直接赋值即可说明变量
注意变量说明后 ,使用$ 变量名来使用该变量