shell编程

1 shell脚本介绍
2 shell脚本结构和执行
3 date命令用法
4 shell脚本中的变量
5 shell脚本中的逻辑判断
6 文件目录属性判断
7 if特殊用法
8 case判断
9 for循环
10 while循环 11 break跳出循环
13 continue结束本次循环
14 exit退出整个脚本

1 shell脚本介绍

  • shell是一种脚本语言
  • 可以使用逻辑判断、循环等语法
  • 可以自定义函数
  • shell是系统命令的集合
  • shell脚本可以实现自动化运维,能大大增加我们的运维效率

2 shell脚本结构和执行

  • 开头需要加#!/bin/bash
  • 以#开头的行作为解释说明
  • 脚本的名字以.sh结尾,用于区分这是一个shell脚本
  • 执行方法有两种
  • chmod +x 1.sh #授权
  • ./1.sh
  • bash 1.sh
  • 查看脚本执行过程 bash -x 1.sh
  • 查看脚本是否语法错误 bash -n 1.sh

3 date命令用法

#年月日
[root@test shell]# date +%Y-%m-%d
2019-06-15
[root@test shell]# date +%y-%m-%d
19-06-15
#时间
[root@test shell]# date +%H:%M:%S
23:12:42
[root@test shell]# date +%T
23:13:03
#时间戳
[root@test shell]# date +%s
1560611619
[root@test shell]# date -d @1560611619
Sat Jun 15 23:13:39 CST 2019
[root@test shell]# date +%s -d "2019-06-15 23:15:17"
1560611717
#一天后
[root@test shell]# date -d "+1 day"
Sun Jun 16 23:16:10 CST 2019
#一天前
[root@test shell]# date -d "-1 day"
Fri Jun 14 23:16:49 CST 2019
#一月前
[root@test shell]# date -d "-1 month" 
Wed May 15 23:17:19 CST 2019
#一分钟前
[root@test shell]# date -d "-1 min"
Sat Jun 15 23:16:49 CST 2019
#星期几
[root@test shell]# date +%w
6
#指定日期查星期几
[root@test shell]# date +%w -d "2019-06-14"
5
#今天的第几个星期
[root@test shell]# date +%W
23

4 shell脚本中的变量

 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
 使用条件语句时,常使用变量    if [ $a -gt 1 ]; then ... ; fi
 引用某个命令的结果时,用变量替代   n=`wc -l 1.txt`
 写和用户交互的脚本时,变量也是必不可少的  read -p "Input a number: " n; echo $n  
   如果没写这个n,可以直接使用$REPLY
 内置变量 $0, $1, $2…    $0表示脚本本身,$1 第一个参数,$2 第二个 ....       $#表示参数个数
 数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b] 

5 shell脚本中的逻辑判断

 格式1:if 条件 ; then 语句; fi
 格式2:if 条件; then 语句; else 语句; fi
 格式3:if …; then … ;elif …; then …; else …; fi
 逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格
 可以使用 && || 结合多个条件
 if [ $a -gt 5 ] && [ $a -lt 10 ]; then
 if [ $b -gt 5 ] || [ $b -lt 3 ]; then
判断符号含义
-gt (>)大于
-lt(<)小于
-ge(>=)大于等于
-le(<=)小于等于
-eq(==)等于
-ne(!=)不等于
&&并且
双分隔符或者
#例子
#!/bin/bash
a=5
if [ $a -lt 4 ] 
then
	 echo "<6"
elif [ $a -gt 3 ]
then
echo ">3"
else
echo no ok
fi

6 文件目录属性判断

if 判断文件、目录属性

  • [ -f file ]判断是否是普通文件,且存在
  • [ -d file ] 判断是否是目录,且存在
  • [ -e file ] 判断文件或目录是否存在
  • [ -r file ] 判断文件是否可读
  • [ -w file ] 判断文件是否可写
  • [ -x file ] 判断文件是否可执行
例子
#!/bin/bash
f="/tmp/123"
if [ -f $f ]
then
	echo "文件存在"
else
	touch $f
	echo $f已创建
fi

7 if特殊用法

if判断的一些特殊用法 if [ -z "$a" ] 这个表示当变量a的值为空时会怎么样 if [ -n "$a" ] 表示当变量a的值不为空 if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样 if [ ! -e file ]; then 表示文件不存在时会怎么样 if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

8 case判断

格式 case  变量名 in
   value1)
     command
     ;;
   value2)
     command
     ;;
   *)
   commond
     ;;
   esac
在case程序中,可以在条件中使用|,表示或的意思, 比如
2|3)
command
;;

例子及思路

 #!/bin/bash
read -p "Please input a number: " n
if [ -z "$n" ]
then
    echo "Please input a number."
    exit 1
fi

n1=`echo $n|sed 's/[0-9]//g'`
if [ -n "$n1" ]
then
    echo "Please input a number."
    exit 1
fi

if [ $n -lt 60 ] && [ $n -ge 0 ]
then
    tag=1
elif [ $n -ge 60 ] && [ $n -lt 80 ]
then
    tag=2
elif [ $n -ge 80 ]  && [ $n -lt 90 ]
then
    tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]
then
    tag=4
else 
    tag=0
fi
case $tag in
    1)
	echo "不及格"
        ;;
    2)
        echo "及格"
        ;;
    3)
        echo "优秀"
        ;;
    4)
        echo "很优秀"
        ;;
    *)
        echo "The number range is 0-100."
        ;; 
esac
#说明
read -p 和用户交互用户输入的值为n的变量
如果用户没有输入则提示请输入然后退出
用变量来处理用户输入的内容删除所有数字
如果不为空则退出脚本提示输入数字
如果为空则说明至少是数字,继续往下走
如果大于等于0小于60,标记tag=1
如果小于80大于等于60,标记tag=2
如果小于90大于等于80,标记tag=3
如果大于等于90小于等于100,标记为tag=4
其他的标记为tag=0
case判断变量tag
如果tag=1,输出不及格
如果tag=2,输出及格
如果tag=3,输出优秀
如果tag=4,输出很优秀
如果tag=0,输出请输入数字0-100
结束

9 for循环

语法:for 变量名 in 条件; do …; done

 案例1
 #!/bin/bash
sum=0
for i in `seq 1 100`
do
    sum=$[$sum+$i]
    echo $i
done
echo $sum
#!/bin/bash
cd /etc/
for a in `ls /etc/`
do
	if [ -d $a ]
then
	echo $a
	ls $a
fi
done

10 while循环

语法 while 条件; do … ; done

 案例1
#!/bin/bash
while :
do
	load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
	if [ $load -gt 10 ]
then
	/usr/lib/zabbix/alertscripts/zabbix_mail.py zenghong133@163.com "load high" "$load"
fi
	sleep 30
done
#while中:跟true都表示真,死循环
#!/bin/bash
while :
do
    read -p "Please input a number: " n
    if [ -z "$n" ]
    then
        echo "you need input sth."
        continue
    fi
    n1=`echo $n|sed 's/[0-9]//g'`
    if [ -n "$n1" ]
    then
        echo "you just only input numbers."
        continue
    fi
    break
done
echo $n
#continue如果输入不对就重新循环,输入的对就break,退出脚本,打印$n

11 break跳出循环

[root@test shell]# cat 9.sh 
#!/bin/bash
for i in `seq 1 5`
do
	echo $i
	if [ $i == 3 ]
then
	break
	fi
	echo $i
done
	echo aaa
[root@test shell]# sh 9.sh 
1
1
2
2
3
aaa
#两个1因为是有两个echo 当循环到3则break跳出循环(for、do、done)直接done下面的echo aaa

12 continue结束本次循环

忽略continue之下的代码,直接进行下一次循环

[root@test shell]# cat 10.sh 
#!/bin/bash
for i in `seq 1 5`
do
	echo $i
	if [ $i == 3 ]
then
	continue
	fi
	echo $i
done
	echo aaaaaaa
[root@test shell]# sh 10.sh 
1
1
2
2
3
4
4
5
5
aaaaaaa
#执行到3则忽略下面的代码继续进行上面的循环

13 exit退出整个脚本

[root@test shell]# cat 11.sh 
#!/bin/bash
for i in `seq 1 5`
do
   echo $i
   if [ $i == 3 ]
   then
         exit
    fi
   echo $i
done
echo aaaaaaa

[root@test shell]# sh 11.sh 
1
1
2
2
3
#直接退出整个脚本

总结

break跳出循环:跳出本次循环,继续执行下面的代码
continue结束本次循环:结束本次循环继续上面的循环
exit退出整个脚本:直接退出脚本

扩展

select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html

转载于:https://my.oschina.net/zenghong133/blog/3062716

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值