第七天

来源:互联网 发布:武器禁运中国知乎 编辑:程序博客网 时间:2024/04/30 14:09
bash中如何实现条件判断?
条件调试类型:
整数测试
字符测试
文件测试

条件调试的表达式:
[ expression ] 一定要有空格
[[ expression ]]:bash的关键字
test expression

整数测试:
-eq:测试两个整数是否相等,比如$a -eq $b
-ne:测试两个整数是否不等,不等为真,等为假
-gt:测试一个数是否大于另一个数
-lt:测试一个数是否小于另一个数
-ge:大于或等于
-le:小于或等于


文件测试:
-e FILE:测试文件是否存在
-f FILE:测试文件是否为普通文件
-d FILE:测试指定路径是否为目录
-r
-w
-x


[ -e /etc/inittab ]


条件判断,控制结构;
单分支if语句
if 判断条件; then
statement1
statement2
...
if


双分支的if语句
if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi


多分支的if语句
if 判断条件1; then
statement1
...
elif 判断条件2; then
statement2
...
elif 判断条件3; then
statement3
...
else
statement4
...
fi


测试脚本是否有语句错误:bash -n FILE
单步执行:bash -x FILE


#!/bin/bash
#
grep "\<bash$" /etc/passwd &> /dev/null
RET=$?
if [ $RET -eq 0 ]; then
        USERS=`grep "\<bash$" /etc/passwd | wc -l` #命令替换``
        echo "The shells of $USERS users is bash."
else
        echo "No such user."
fi


exit:退出脚本
exit 0-255:
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码


bash变量的类型:
本地变量(局部变量):当前shell进程
环境变量:当前shell及其子shell
位置变量:
$1,$2,$3:
file arg1 arg2
$1:arg1
$2:arg2
shift -n(几个参数):当前参数踢除,后一个参数往前移
特殊变量:
$?:上一条命令的退出状态码
$#:参数个数
$*:参数列表

$@:参数列表


for ((i=1;i<=$#;i++))
do
echo ${!i}
done



执行方式:
1、./fileName,文件必须要有执行权限,./执行调用的开头第一行定义的shell
2、sh/fileName,文件可以不需要执行权限


shell中如何运行算术运算:
1、let 算术运算表达式
let c = $a+$b
2、$[算术运算表达式]
c=$[$a+$b]
3、$((算术运算表达式))
c=$(($a+$b))
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用

c=`expr $a + $b`


grep,sed(流编辑器),awk


sed基本用法:
sed:Stream EDitor
行编辑器,逐行处理文本
全屏编辑器(vi)
sed模式空间,将文本读取到内存当中然后在屏幕上输出
默认不编辑原文件,仅对模式空间中的数据做处理。


sed [options]'AddressCommand' file ...
-n:静默模式,不显示模式空间中的内容
-i:直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r:使用扩展正则表达式
history | sed 's#^[[:space:]]*##g'
Address:
1、StartLine,EndLine
比如1,100
$:最后一行
$-1:倒数第二行
2、/REGExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,中间的所有行
4、LineNumber
5、StartLine, +N
从startLine开始,向后的N

Command:
d:删除符合条件的行 
p:显示符合条件的行
a \string:在指定的行后面追加新行,内容为string
\n:可以换行
i \string:在指定的行前面追加新行,内容为string
r FILE:将指定文件的内容添加至符合条件的行处
w FILE:将地址指定的范围内的行另存至指定的文件中
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符
g:全局替换
i:查找时忽略大小写
s///:s###,s@@@也可以,只要分隔符是相同的就行,这样就可以不用进行转义了
\(\),\1,\2
$:引用模式匹配整个串
sed 's#\(1..e\)#\1r#g' file


字符测试:
==:测试是否相等,相等为真,不等则假
!=:测试是否不等,不等为真,等为假
>
<
-n string:测试指定字符串是否为空,空则真,不空则假
-z string:测试指定字符串是否不空,不空为真,空则为假


循环:进入条件,退出条件
for
while
until


for 变量 in 列表; do
循环体
done


for i in 1 2 3 4 5; do
加法运算
done


遍历完成之后,退出 :
如何生成列表:
(1..100)
`seq [起始数 [步进长度]] 结束数`


declare -i SUM=0
integer
-x export



0 0
原创粉丝点击