shell是用户与linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,许多强大的功能都能通过shell实现
1、重定向
文件描述符:0 为一个程序的标准输入、1为标准输出、2为标准错误输出
使用 > file.txt 可以将程序标准输出重定向到一个文件,默认情况下会将该文件的内容覆盖
>>file.txt 则将程序标准输出追加到file.txt文件中
如果想对标准错误输出进行重定向,则需要把想要重定向的文件描述符编号加在 >操作符前面
$kill -HUP 1234 >killout.txt 2>killerr.txt //将标准输出和标准错误输出分别重定向到不同文件中
$kill -l 1234 >killouterr.txt 2>&1 //将标准输出和标准错误输出都重定向到同一个文件中
$kill -l 1234 >/dev/null 2>&1 //将。。。。重定向到回收站(丢弃输出信息)
同理,输入也可以重定向
$more <killout.txt
2、摘要
linux很少利用文件扩展名来决定文件的类型
3 、 shell语法:
变量:字符串、数字、环境和参数
条件:shell中的布尔值
程序控制:if ,elif , for ,while ,case
命令列表
函数
shell内置命令
获取命令的执行结果
here文档
3.1 变量
在shell中可以通过在变量名前加$符号来访问它的内容
$value="Yes Dear" //如果字符串里包含空格,就必须用引号把他们括起来,此外,等号两端不能有空格
$read value //使用read命令将用户的输入赋值给一个变量
一般情况下脚本文件中的参数以空白字符分隔(空格,制表符或换行符),如果要在一个参数中包含一个或多个空白字符,那么就必须给参数加上引号。
$ myvar="hi there"
>echo $myvar
>echo "$myvar" //双引号,变量会被替换
>echo '$myvar' //单引号,变量不被替换
>echo \$myvar // 使用\ 取消$符号的特殊意义
hi there
hi there
$myvar
$myvar
环境变量
$IFS //输入域分隔符,当shell读取输入的时候,它给出用来分隔单词的一组字符,通常是空格、制表符和换行符
$0 //shell脚本的名字
$# //传递给脚本的参数个数
Conditions
[ 与条件之间应当有空格(而给变量赋值的时候。。。)
if [ -f fred.c ]; then
set-gid 和set-uid 标志对shell脚本程序不起作用,它们只对可执行的二进制文件有用
shell在默认情况下认为所有的变量包含的都是字符串,foo=43 此处,43当成了字符串
until语句
until conditions //执行下面的statements 知道conditions成立
do
statements
done
case 语句 //case将使用第一个匹配的模式,即使后面的模式有更精确的匹配,case不去查找最佳匹配
case variable in
pattern [ | pattern] ...) statements;; //注意是双分号结尾
pattern [ | pattern] ...) statements;;
...
esac
注意 * 通配符在引号中不起作用
AND列表
statement1 && statement2 && statement3 && ... //下一个statement只有在前面所有的statement都执行成功的情况下 //才执行,&&的作用是检查前一条命令的返回值
注意,在一个脚本程序中执行另外一个脚本程序要比执行一个函数慢得多