shell脚本基础知识点

1 sh -x 脚本 可以显示脚本执行过程,即具体的命令
#cat hello.sh
date
echo 'hellp world'
#sh -x hello.sh
+ date
Fri Dec 30 04:28:01 PST 2016
+ echo 'hellp world'
hellp world

2 date 命令
#date
Fri Dec 30 04:35:03 PST 2016
date +"%Y-%m-%d %H:%M:%S %w"
2016-12-30 04:41:04 5
#date +"%y-%M-%D %h:%m:%s"
16-33-12/30/16 Dec:12:1483101235
##注意 date和+之间有空格,但是+和”之间是没有空格的!!
上面的实验可以得出:
%Y 年份, %y指代年份的后两位
%m 月份 ,%M分
%d 日 %D指代完整的日期:12/30/16 12月30日2016年
%h 月份缩写,12月Dec %H 小时
%S 秒 %s表示就不清楚了
%w 表示星期 礼拜天的话显示0

date -d 的用法,因为有时候脚本需要用到一天前的日期
[rose1][oracle][/home/oracle/scripts]#date -d "-1 day" +%d
29
[rose1][oracle][/home/oracle/scripts]#date +%d
30
[rose1][oracle][/home/oracle/scripts]#date -d "-1 hour" +%H
03
[rose1][oracle][/home/oracle/scripts]#date +%H
04
[rose1][oracle][/home/oracle/scripts]#date -d "-1 min" +%M
43
[rose1][oracle][/home/oracle/scripts]#date +%M
44
如果要一天零1个小时前的信息。
[rose1][oracle][/home/oracle/scripts]#date -d "-1 hour -1day" "+%H %D"
03 12/29/16
[rose1][oracle][/home/oracle/scripts]#date "+%H %D"
04 12/30/16


3 变量
作用:第一:可以有效地减少脚本长度 第二:如果脚本中重复使用一个路径,发现错了,就算是批量修改路径也很麻烦,如果指定变量,改下变量就好了。

#!/bin/bash
dd=`date +"%Y%m%d %H%M$S"`
echo "the scrpit begin at $dd"
echo "now we will sleep 3 seconds"
sleep 3
dd2=`date +"%Y%m%d %H%M%S"`
echo "the script end at $dd2"
###注意,此处是反引号 ` ` 数字1左边那个。反引号之间表示执行。
sleep 1    睡眠1秒
sleep 1s    睡眠1秒
sleep 1m   睡眠1分
sleep 1h   睡眠1小时 

###简单的两数相加脚本
#!/bin/bash
dd=`date +"%Y-%m-%d %H:%M:%S"`
echo "begin at $dd"
a=5
b=6
sum=$[$a+$b]
echo "$a+$b=$sum"
注意两点:
1 数学运算外面要加上 $[ ], 不然结果就变成下面这样

4 shell和用户的交互 read
#!/bin/bash
##test the usage of read
##at 1026-12-30 21:45
dd=`date +"%Y-%m-%d %H:%M:%S"`
echo "begin at $dd"
read -p "please input a number:" a
read -p "please input another number:" b
sum=$[$a+$b]
echo "the sum of the two number is: $sum"


5 shell 中的预设变量
类似于 /etc/init.d/iptables   restart; listener status ;这种命令其实都是预设变量的应用, /etc/init.d/iptables  都是脚本。下面做个简单那试验:
[rose1][oracle][/home/oracle/scripts]#cat choose.sh
#!/bin/bash
dd=`date +%D`
echo $dd $0
sum=$[$1 + $2]
echo "sum=$sum"

$1 $2 代表即将输入的两个数字,%0代表的脚本名字本身,这里感觉$0像是命令中带有脚本名字的遗传,比如./choose.sh 那么就显示 ./choose.sh ,换成sh后,就没了./


6 shell 中的逻辑判断
A) if (elif ,else可带可不带; 5个关键词:if then elif else fi ;此外,只有then 前面才有 ; )
if 判断语句; then command ##建议前面空格,方便查看
elif 判断语句; then
else command fi
#################################
#cat if1.sh
#!/bin/bash
read -p "please input you number:" x
if (($x<60));then
echo "you no pass"
elif (($x<85));then
echo "good,you passed"
else echo "contratulations,PASS"
fi
###注意点: 1 (($x<60))这个是shell特有的格式,一个括号或者不带都会报错。
2 不要忘掉 if 判断语句 后面的 ;then
执行结果:

##比较数值大小
除了上述的 (($a<60)) 这种双括号外,还可以使用[ ],但是中括号不能用< >=,必须用-gt -lt等
[root@localhost sbin]# a=10; if [ $a -lt 5 ]; then echo ok; fi [root@localhost sbin]# a=10; if [ $a -gt 5 ]; then echo ok; fi ok [root@localhost sbin]# a=10; if [ $a -ge 10 ]; then echo ok; fi ok [root@localhost sbin]# a=10; if [ $a -eq 10 ]; then echo ok; fi ok [root@localhost sbin]# a=10; if [ $a -ne 10 ]; then echo ok; fi
###中括号前后有空格
-eq           //等于
-ne           //不等于
-gt            //大于
-lt            //小于
ge            //大于等于
le            //小于等于
巧记:
eq equal
gt greater than
lt less than
ge greater or equal
###if 的其他用法
#if [ -e /home/oracle/for2.sh ]; then echo "exist"; fi
exist
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为:
if [ -e filename ] ; then

##除了if之外,shell中还有一种常用的方式,case
case 变量 in value1) command ;; value2) command ;; value3) command ;; *) command ;; esac

还是以分数为例:
#!/bin/bash
read -p "input an number" x
case $x in
<60)
echo "no pass"
;;
>=60)
echo "good"
;;
*)
echo "high"
esac
执行之后发现并不能行的通,
./case.sh: line 4: syntax error near unexpected token `<'
./case.sh: line 4: ` <60)'
case并不能识别<
说明,case使用于单点的选项,比如 ABCD选一个。
如果是范围的,带有 <> ,那么if更好;
下面做一个判断奇偶数的脚本。
[rose1][oracle][/home/oracle/scripts]#cat case1.sh
#!/bin/bash
dd=`date +"%Y-%m-%d %H:%M:%S"`
read -p "input a integer:" n
a=$[$n%2]
case $a in
1)
echo "$dd,the number is odd"
;;
0)
echo "$dd the number is even"
;;
*)
echo "$dd not an integer"
;;
esac


case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了。

7. shell 中的循环
一般shell中的循环有两种: for 和 while

for玄幻 的格式:
for 变量名 in 循环的条件 ; do command done

$ cat for.sh
#!/bin/bash
for i in `seq 5 `; do
read -p "input a number:" n
echo $n>>num.txt
done


while循环:
while 条件 ; do
command
done

vi while.sh
#!/bin/bash
a=10
while (($a>5));do
echo "$a" >> while.txt
a=$[$a-2]
done

##此外,while中 条件可用 : (冒号代替),可以达到死循环的效果
[oracle@DB-TEST01 pratice]$ cat while_die.sh
#!/bin/bash
while : ;do
echo "love is hard to choose"
done
然后结果是满屏幕的刷 love is hard to choose

8 shell中函数的调用
$ cat function_sum.sh
#!/bin/bash
function sum() {
sum=$[$1+$2]
echo $sum
}
sum $1 $2


上面的我都是参考阿铭老师书籍《跟阿铭学linux》第二版第十章来做学习实验,并加入了自己的思考,特此感谢阿铭老师分享的资源。
上面的有些显示结果我是截图的,因为截图较多,所以没有上传,仅供参考。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31404823/viewspace-2131721/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31404823/viewspace-2131721/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值