shell的建立和执行
shell文档的建立直接使用vim就可以了,不过运行有多种方式。假设我们建的shell程序叫 test。
- bash <test
- bash test 参数....
- chmod a+x test; PATH=$PATH:.; test。
alias为字段增加别名,unalias取消别名。alias ll='ls -l';
shell特殊字符
- *(星号):匹配任意字符的0次或者多次。f*--> f、fa、fl;.*file--->.peofile.......
- ?(问号):匹配任意一个字符
- [字符组]:匹配该字符组所限定的任何一个字符。如f[abcde]/f[a-e]可以匹配 fa,fb,fc,fd。不能匹配其他的
- !(惊叹号):如果他紧跟在一对方括号的左方括号,表示匹配的不能是里面的东西。
模式表达式
- *(星模式),匹配报刊0次或者多次出现的模式,每个模式用‘|’分割开。如 file*(.c|.o)---->file,file.o,file.c,file.o.c等等,但不会出现file.h之类的东西。
- +(加模式):和第一个差不多,但是他是至少出现1次。
- ?(问号模式):和第一个的区别就是,只出现0次或者1次。
- @(模式表):和第一个的区别,就是只出现1次。
- !(模式表):除了模式的东西,可以匹配任何表。
引号
- 单引号:使用单引号括起来的都是普通字符
- 双引号:使用双引号括起来的字符(除了$,倒引号~,反斜杠外均作为普通字符对待)。$表示变量替换;倒引号表示命令替换;反斜杠后面的只能是:$、`、"、之中的一个。
- 倒引号`:将倒引号括起来的字符串被shell解释为命令行。倒引号可以嵌套,内层的倒引号需要用转义。
输入输出重定向符
- 输入重定向<:把命令的标准输入重新定向到指定的文件。$bash< ext2;
- 输出重定向>:把命令的标准输出到指定文件。 $who>abc.
- 输出附加重定向>>:表示输出到指定文件的末尾。$ps -l >>abcd。
- 及时文件定向符<<: $mail <<!!fsdffsfsfsf!!。
命令执行操作符
- 逻辑与:逻辑与是&&将两个命令联系在一起。命令1&&命令2:如果命令1执行成功,则执行命令2,如果命令1执行不成功,则不执行命令2.
- 逻辑或:逻辑或是||将两个命令联系在一起。先执行命令1,如果执行不成功,则执行命令2。否则命令1执行成功,就不执行命令2.
成组命令
- {}形式;被{}括起来的全部命令,看做语法上的一条命令,出现在管道的一边。注意:{}格式:左括号{ 后面应该有一个空格;右括号}之前应该有一个分号(;);例如 : { echo "report of user for `date`" echo echo "this is `who|wc -l` user loggin in." who|sort;}|pr
- ()形式:和{}的=形式上的不同就是,在(后不需要空格;在)前不需要分号(;);但是他们两个之间还有重要的区别。{}的成组命令只是在本shell内执行命令表,不会产生新的进程;用()括起来的成组命令是在新的子shell内执行,需要建立新的子进程。
输入输出命令
输入命令:read。
输入格式:read name;
参数问题:①:参数和字符串个数相同,由左到右一一赋值;②参数少于字符串个数,由左到右一一赋值,最后一个参数接受全部字符串;③参数个数大于字符串个数;由左到右一一赋值,没有赋值的参数用空值表示。
输入命令echo:如上列子所示。
参数置换变量
操作符是::-;:=;:+;:?四种。
:-示例:
:=示例
:+示例
:?示例
- :- :表示,给定变量有值,那么值就等于变量的值;如果给定变量的值为空,那么等于后面给出的字符串值,并且变量的值都不会发生变化。
- := :表示,变量有值,那么值就等于变量值,如果变量值为空,那么变量值和表达式的值都为后面给出字符串的值。
- :+ :表示,如果变量为空,那么表达式也为空;如果变量不为空,那么表达式的值等于给出字符串的值。
- :?:表示,如果变量为空,那么现实为shell及脚本名:变量1:字符串。如果变量值不为空,那么表达式的值等于变量的值。
条件测试
test -f "$1"或者 [ -f "$1" ];注意[之后有一个空格,]之前有一个空格
ps:尴尬,我的虚拟机没有调,导致虚拟机里粘贴不出来、。