shell编程总结

Posted xiayutianer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程总结相关的知识,希望对你有一定的参考价值。

简单例子摆一摆,引出容易忘记的一些小细节...东西碎,多总结,勤翻翻。
范例一:大峥子日常脚本
#!/bin/bash
set +e

start_time=20180401 #含
end_time=20180630 # #含
datetime=${start_time}

while ((${datetime} <= ${end_time})) #这个有多种写法,也可以写成while [ ${datetime} -le ${end_time} ]
do

echo datetime=${datetime}
cd /dws_fin_vip_gross_profit_day
sh profit_day.sh ${datetime}

if [ $? -ne 0 ];then
echo "Failure: partition--dt=${datetime}"
exit 1
else
echo "Success: partition--dt=${datetime}"
fi

datetime=`date -d "${datetime} 1 day " +%Y%m%d`
done

#范例二:设计一个shell脚本xm.sh,在/tmp/test下创建50个目录,即user1至user50,并设置每个目录权限,其中其他用户权限为“读”,文件所有者权限为“读写执行”,文件所有者组的权限为“读执行”。
#法一:用for循环写
#!/bin/bash

cd /tmp/test
for i in {1..50};
do
mkdir user_${i};
done

chmod 754 user*

#法二:用while循环写
#!/bin/bash
i=1
while [ $i -le 50 ]
do
mkdir user_$i
i=$((i+1))
done
chmod 754 user*
#注意
切记,在中括号[]内的每个组件都需要有空格键来分隔,假设我用□来表示空格,那么这些地方你需要有空格[□"$HOME"□==□"$MAIL"□]
在中括号内的变量,最好都以双引号括起来
在中括号内的变量,最好都以单或双引号括起来

#关于那些括号的用法实例
if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done

#可用的整数比较运算符
等于 -eq(equal)
不相等 -ne (not equal)
大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)


#字符串比较运算符
= 比较字符串内容是否相同 与==等价
!= 比较字符串内容是否不同
-z 判断字符串是否为0,若字符串为空字符串,则为true
-n 判断字符串是否为非0,若字符串为空字符串,则为false,-n也可忽略

#文件常用测试所用的参数
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有读权限
-w 写权限
-x 执行权限

#特殊变量列表
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
[email protected] 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"[email protected]" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。



#多重条件判断
-o 任何一个条件成立,例如test -r file -o -x file,则file同时具有r或x权限时,就可传回true,另外["$yn"== "Y" -o "$yn"== "y"]也可以写成["$yn"== "Y"]||"$yn"== "y"一个中括号变两个,所以也可用||
-a 两个条件同时成立,例如test -r file -a -x file,则file同时具有r与x权限时,才回传true 同上,也可以用&&
! 反向状态,例如test ! -x file,当file不具有x时,回传true

#if判断
if [ 条件判断式 ];then
当条件判断式成立时,可以进行的命令工作内容;
else
当条件判断式不成立时,可以进行的命令工作内容;
fi

if [ 条件判断式一 ];then
当条件判断式一成立时,可以进行的命令工作内容;
elif [ 条件判断式二 ];then
当条件判断式二成立时,可以进行的命令工作内容;
else
当条件判断式不成立时,可以进行的命令工作内容;
fi

#for循环
#数字的常见写法
for var in {1..40}
do
程序段
done

for var in $(seq 1 100) #seq为sequence的缩写之意
do
程序段
done

for((i=1;i<$num;i=i+1))
do
程序段
done

#字符串的常见写法
for var in dog cat elephant
do
程序段
done

#while循环
while [ condition ]
do
程序段
done

#case...esac条件判断
case $变量名 in
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
*)
exit 1
;;
esac
#其他小技巧
比较两个字符串的方法: if [ "$test"x = "test"x ]; then 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的





































































































































































以上是关于shell编程总结的主要内容,如果未能解决你的问题,请参考以下文章

shell 编程for循环总结

Shell编程总结

Shell编程总结

shell编程总结

shell编程总结

shell 编程数组总结