2018.10.20日,预习笔记,shell编程

笔记目录

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

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

 

一.shell脚本介绍

41d5f40059085a6ca449f32bb0eaf800763.jpg

  • shell是一种脚本语言  
  • aming_linux  blog.lishiming.net  每天会有一道shell练习题
  • 可以使用逻辑判断、循环等语法  
  • 可以自定义函数  
  • shell是系统命令的集合  
  • shell脚本可以实现自动化运维,能大大增加我们的运维效率

 

二.shell脚本结构和执行

68352bfe39577d6f1c9ba63a359dd1f647a.jpg

  • 开头需要加#!/bin/bash  (指定为bin/bash命令解释器)

d20f260f6c24bebf696a30bd8d4928927ca.jpg

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

 

三.date命令用法

9497b7b13dfac72bb5a6c333c4385fb4c15.jpg

  • date 日期时间

7dc9bd9687790ebb1a6a313834f748340e9.jpg

  • date +%Y-%m-%d, date +%y-%m-%d 年月日  

becefa8c621829a1e3ef39f5a35837547c0.jpg

  • date +%H:%M:%S = date +%T 时间  

 

  • date +%s 时间戳  

c2fb048f5b6481b95a84b0394f052c9df54.jpg

  • date +%w 周 

c5fb2de75362a080235ddcaffb99c12780b.jpg

  •  cal查看日历

f0d860f9134c1d164969e934eed58ba6932.jpg

  • date -d @1504620492  标记时间戳

77e15dd7ba86652c4d8bf50f9e07db43c82.jpg

  • date -d "+1day"  一天后  
  • date -d "-1 day"  一天前  
  • date -d "-1 month" 一月前  
  • date -d "-1 min"  一分钟前  
  • date +%w, date +%W 星期

39d4e93e08cc311059dc8094c8a1d13ea46.jpg

 

四.shell脚本中的变量

3040ce7c462afdff1e92297fbc4adfddadc.jpg

  • 当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替  
  • 使用条件语句时,常使用变量    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] 

 

五.shell脚本中的逻辑判断

6c409a1869506f35d4117c41b1894282024.jpg

  • 格式1:if 条件 ; then 语句; fi  

b9e0b9c2a67de5bf3a7c1aaea6402c28c2b.jpg

  • 格式2:if 条件; then 语句; else 语句; fi  

893810842152f844013b0186be90e11db22.jpg

56c9934aa0a8e32c024ed1ad626b6abacd8.jpg

  • 格式3:if …; then … ;elif …; then …; else …; fi  

6536c482d9c2bc7a118cba757c1f8ce8e1b.jpg

deee15fa73b1d2069d8b77a293dbdeea322.jpg

  • 逻辑判断表达式: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

 

六.文件目录属性判断

0468e16545379fa593787b2e22ba2112630.jpg

  • [ -f file ]判断是否是普通文件,且存在  
  • [ -d file ] 判断是否是目录,且存在  
  • [ -e file ] 判断文件或目录是否存在  
  • [ -r file ] 判断文件是否可读
  • [ -w file ] 判断文件是否可写  
  • [ -x file ] 判断文件是否可执行

a0010a665352d863fcfbef6001078e0a350.jpg

f599c187f6bd03a6afd63dcec09fed44b6d.jpg

 

七.if特殊用法

02ba05f8a3d493e92c078bea0d08d2022a3.jpg

  • 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…  
  • [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

 

八.case判断 

933de24e673f620dabd6d1514dbff98f285.jpg

示例一:

  • shell脚本案例

 #!/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 "not ok"        

;;    

2)        

echo "ok"        

;;    

3)        

echo "ook"        

;;    

4)        

echo "oook"        

;;    

*)        

echo "The number range is 0-100."        

;;

esac

 

 

九.for循环

b295d5334734fc209fcd23f667b66c9e9ec.jpg

示例一:

脚本

#!/bin/bash

sum=0 定义值

for i in `seq 1 100` 循环1~100

do  

 sum=$[$sum+$i]    

echo $i

done

echo $sum

 

示例二:

文件列表循环  

#!/bin/bash

cd /etc/ 进入到/etc/目录下

for a in `ls /etc/` 循环ls查看

do    

if [ -d $a ]    

then      

ls -d $a    

fi

done

 

 

十.while循环

f433afb2a7bcc6d49237964927e93d119e1.jpg

示例一:

#!/bin/bash

while :  死循环

do    

load=`w|head -1|awk -F 'load average:  ' '{print $2}'|cut -d. -f1`    过滤出你想要的值

if [ $load -gt 10 ]    当值大于10

then     就

top|mail -s "load is high: $load" asldkfls@11.com    发邮件到该邮箱地址里

fi    

sleep 30 休眠30秒后再执行查看

done

示例二:

#!/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   打印出你输入的值

 

 

十一.break跳出循环

0bc68b165e88beb1461a67b38333b2052dd.jpg

示例一:

#!/bin/bash

for i in `seq 1 5` 循环1~5

do    

echo $i    打印出值

if [ $i == 3 ]    值等于3

then     就

break   跳出循环

 fi    

echo $i 输出值

done 结束

echo aaaaaaa  打印aaaaaaa

 

十二.continue结束本次循环

294374f61f059b54917a23cec8562a16d6c.jpg

示例一:

#!/bin/bash

for i in `seq 1 5` 循环1~5

do    

echo $i    输出值

if [ $i == 3 ]    值等于3

then     就

continue    结束循环

fi    

echo $i  输出值

done 结束

echo $i  输出值

 

十三.exit退出整个脚本

4e3ca32bd9c28b59398d4a60b55f3c8a4b5.jpg

示例一:

#!/bin/bash

for i in `seq 1 5` 循环1~5

do    

echo $i    打印值

if [ $i == 3 ]    等于3

then     就

exit    退出脚本

fi    

echo $i 打印值

done 结束

echo aaaaaaa 输出aaaaaaa

 

十四.扩展

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

 

 

转载于:https://my.oschina.net/u/3912766/blog/2250925

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值