君正X系列开发---shell编程3

时间:2021-02-12 08:46:33
shell可以实现输入,输出重定向,<  >
使用管道 | 在同时执行的程序间传递数据
使用$(...)获取子进程的输出


管道可以实现两个进程之间的通讯,并且可以协调相互运行。


检查脚本是否是脚本程序:file name
cui@cui-vir:~/tmp/shell$ file first 
first: POSIX shell script, ASCII text executable


编写第一个shell脚本


#!/bin/sh


for file in *
do
if grep -q POSIX $file
then
echo $file
fi
done


exit 0


添加可执行权限,chmod +x first


然后在当前目录执行./first
添加./是一个好习惯


shell对大小写敏感:foo Foo FOO是不同的
在shell中我们可以通过在变量名前添加$符号访问他的内容;
无论何时想要获取变量内容,都应该在它前面添加$;
$salution="Yes Dear"
$echo $salution
注意,如果字符串包含空格,就必须使用引号将他们括起来,还要注意等号两边不能有空格




引号的使用:
一般情况下,脚本文件中的参数以空白字符分隔,如果想在一个参数中包含一个或多个空白字符,
必须给参数加上引号。


单引号不会发生替换现象,字符串一般放在双引号中,以防止他们被空白字符分开,但允许扩展$.


#!/bin/sh


myvar="Hello there"


echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar


echo Enter some text
read myvar


echo '$myvar' now equals $myvar


exit 0


cui@cui-vir:~/tmp/shell$ ./myvar 
Hello there
Hello there
$myvar
$myvar
Enter some text
Hello World
$myvar now equals Hello World


参数
$0 shell脚本的名字
$# 传递给脚本的参数个数
$$ shell脚本的进程号
$@ IFS为空时,参数值不会结合在一起,而$*会结合在一起
$1,$2... 脚本的参数


[ 或test 命令


请记住:shell脚本程序中的变量扩展都是在脚本程序被执行的时而不是编写时完成的。
所以,变量声明中的语法错误只有在执行是才会发现。


$(command)的用法:


if [  ];then
statements
elif [ ];then
statements
else
statements
fi


for val in val_list
do
statements
done


while condition do
statements
done


case varible in
pattern [ | pattern ]...)statements;;
pattern [ | pattern ]...)statements;;
pattern [ | pattern ]...)statements;;
esac


&&  || 
函数:
function (){
statements
}


export 被导出的变量构成从该shell衍生的任何子进程的环境变量。