Linux Shell编程之Shell命令行
标准输入输出:
a)shell将键盘作为标准输入,屏幕作为标准输出。
b)通过>可以重定向脶巴躔炒输出,<重定向输入,比如
<a>bcat#表示以a为输入,b文件输出执行cat命令
需要特别注意的是标准输出的定向文件会覆盖原来的文件,如果是>>在某个文件末尾追加输出。
管道
shell用管道将一个命令的输出直接连接到另一个命令的输入。符号:|。如
cattest.c|grep“printf”
管道可以很好的连接多个命令来完成一个功能。
tee:tee可以将一个输入输出到两个输出,如
who|teewho.out|greproot#将命令who的输出定位到who.out文件,同时作为grep的输入,查找root项。
在后台运行程序
将一个任务后台运行可以通过命令行加&符号
cattest.c|lpr&#后台打印test.c
bg:首先用CONTROL+Z将任务挂起,输入bg+%jobnum命令可以使任务在后台运行,如果只有一个任务被挂起,可不指定任务号。注意后台运行的程序标准输入和键盘断开,如果任务需要充键盘输入,则任务被阻塞。
fg:将某个后台运行的任务切换到前台运行,如果只有一个后台运行的任务,可以不指定任务号。
特殊字符
字符?:?表示单个字符匹配,注意的是?无法在文件名开头匹配句号“.”。如.cache就不能用?chache进行匹配。
字符*:字符*可以匹配0到任意多个连续的字符。如*abc,表示以abc结尾的所有文件
字符[]:[]表示与括号内的单独一个字符进行匹配。如[abc]*表示以a,b,c中任一字母开头的所有文件。字符号还可以跟!和^组合表示否定,如[^abc]*表示不以a,b,c中任一字符开头的所有文件。
任何shell命令都会在执行之前进行上述的shell展开,比如下面的命令可能无法找到所有的c文件
find–name*.c
因为*.c在命令执行之前,shell展开成当前目录的c文件,如果当前目录确实有.c文件,展开后命令格式出错,应该写成
find–name“*.c”