Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89072
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 507
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-02 17:11
个人简介

还年轻,还有梦

文章分类

全部博文(51)

文章存档

2015年(51)

我的朋友

分类: LINUX

2015-06-18 21:18:09

课程大纲(继续上节课的)

7. if 判断一些特殊用法 
if [ -z $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. shell中的case判断
格式: case  变量名 in 
                     value1)
                          command
                          ;;
                     value2)
                          command
                          ;;
                      *)
                        commond
                            ;;
                      esac

在case程序中,可以在条件中使用|,表示或的意思, 比如    

2|3) 
    command
    ;;

当变量为2或者3时,执行该部分命令。

案例:

  1. #!/bin/bash
  2. read -p "Please input a number: " n

  3. if [ -z $n ]
  4. then
  5.     echo "Please input a number."
  6.     exit 1
  7. fi

  8. n1=`echo $n|sed 's/[-0-9]//g'`

  9. if [ ! -z $n1 ]
  10. then
  11.     echo "Please input a number."
  12.     exit 1
  13. #elif [ $n -lt 0 ] || [ $n -gt 100 ]
  14. #then
  15. #    echo "The number range is 0-100."
  16. #    exit 1
  17. fi

  18. if [ $n -lt 60 ]
  19. then
  20.     tag=1
  21. elif [ $n -ge 60 ] && [ $n -lt 80 ]
  22. then
  23.     tag=2
  24. elif [ $n -ge 80 ] && [ $n -lt 90 ]
  25. then
  26.     tag=3
  27. elif [ $n -ge 90 ] && [ $n -le 100 ]
  28. then
  29.     tag=4
  30. else
  31.     tag=0
  32. fi


  33. case $tag in
  34.     1)
  35.         echo "不及格"
  36.         ;;
  37.     2)
  38.         echo "及格"
  39.         ;;
  40.     3|4)
  41.         echo "优秀"
  42.         ;;
  43.     *)
  44.         echo "The number range is 0-100."
  45.         ;;
  46. esac


复制代码


9. shell脚本中的循环
for循环 语法结构: for  变量名 in 条件; do … done 
案例1:

  1. #!/bin/bash
  2. sum=0
  3. for i in `seq 1 100`
  4. do
  5.     sum=$[$sum+$i]
  6.     echo $i
  7. done
  8. echo $sum

复制代码



案例2:

  1. #!/bin/bash
  2. cd /etc/
  3. for a in `ls /etc/`
  4. do

  5.     if [ -d $a ]
  6.     then
  7.        ls -d $a
  8.     fi
  9. done

复制代码


案例3:

  1. #!/bin/bash
  2. n=`wc -l 1.txt |awk '{print $1}'`
  3. for i in `seq 1 $n`
  4. do
  5.     sed -n "$i"p 1.txt
  6. done

复制代码



while 循环语法结构: while 条件; do … done 死循环用:表示
案例1:

  1. #!/bin/bash
  2. while :
  3. do
  4.     load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
  5.     if [ $load -gt 10 ]
  6.     then
  7.         top|mail -s "load is high: $load" [email]asldkfls@11.com[/email]
  8.     fi
  9.     sleep 30
  10. done
复制代码


案例2:

  1. #!/bin/bash

  2. while :
  3. do
  4.     read -p "Please input a number: " n
  5.     if [ -z $n ]
  6.     then
  7.         echo "你需要输入东西"
  8.         continue
  9.     fi

  10.     n1=`echo $n|sed 's/[-0-9]//g'`

  11.     if [ ! -z $n1 ]
  12.     then
  13.         echo "你只能输入一个纯数字"
  14.         continue
  15.     fi
  16.     break
  17. done
  18. echo $n

复制代码


break直接结束本层循环; 


  1. #!/bin/bash
  2. for i in `seq 1 5`
  3. do
  4.     echo $i
  5.     if [ $i == 3 ]
  6.     then
  7.         break
  8.     fi
  9.     echo $i
  10. done
  11. echo aaaaaaa

复制代码

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


  1. #!/bin/bash
  2. for i in `seq 1 5`
  3. do
  4.     echo $i
  5.     if [ $i == 3 ]
  6.     then
  7.         continue
  8.     fi
  9.     echo $i
  10. done
  11. echo $i
复制代码


exit 直接退出shell


  1. #!/bin/bash
  2. for i in `seq 1 5`
  3. do
  4.     echo $i
  5.     if [ $i == 3 ]
  6.     then
  7.         exit
  8.     fi
  9.     echo $i
  10. done
  11. echo aaaaaaa
复制代码


10. shell中的函数
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
格式: function f_name() {
                      command
             }
函数必须要放在最前面

案例1:

  1. #!/bin/bash
  2. input() {
  3.     echo $1
  4. }
复制代码


案例2:

  1. #!/bin/bash
  2. sum() {
  3.     s=$[$1+$2]
  4.     echo $s
  5. }

  6. sum 1 2

复制代码


案例3:

  1. #!/bin/bash
  2. ip() {
  3.     ifconfig |grep -A1 "$1 " |tail -1 |awk '{print $2}'|awk -F':' '{print $2}'
  4. }

  5. read -p "Please input the eth name: " e
  6. myip=`ip $e`
  7. echo "$e address is $myip"

复制代码

函数里可以export 全局变量


11. shell练习题
编写shell脚本,计算1-100的和;
编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;
编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组;
编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

扩展学习:
select用法   
阅读(1041) | 评论(0) | 转发(0) |
0

上一篇:2015-06-14shell脚本编程1

下一篇:shell练习题

给主人留下些什么吧!~~