精华内容
下载资源
问答
  • case语句

    千次阅读 2018-10-31 19:12:25
    --case语句 --case语法1: --case when condition1 then returnValue1 --when condition2 then returnValue2 --when condition3 then returnValue3 --..... --else defultValue --end as[列别名]   --查询...

    --case语句

    --case语法1:

    --case when condition1 then returnValue1

    --when condition2 then returnValue2

    --when condition3 then returnValue3

    --.....

    --else defultValue

    --end as[列别名]

     

    --查询学生的数学成绩,以优良中差四级显式

    select * from Tbstudent

     

    select stuNumber,stuName,

    case when stuMath>=90 then '优'

    when stuMath>=80 then '良'

    when stuMath>=70 then '中'

    else '差'

    end as 数学成绩

    from Tbstudent

    --注意:1.case语句就是构造出一个新的列

    --      2.使用case语句必须有end,但是可以不起别名

    --      3.所有的返回值类型必须一致

    --   4.case语句的作用类似于C#中的if....else

     

    --练习1:查询每个学生的学号,姓名,最好成绩

    select  stuName,stuNumber,

    case when stuMath>stuEnglish then stuMath

    else stuEnglish

    end as 最优成绩

    from Tbstudent

     

     

    --练习2.查询每个销售员的销售总额,并且列出销售员姓名,总销售额,

    --以及他的称号(》1000金牌销售员,》800银牌销售员,》600铜牌销售员,普通销售员)

    select * from SaleRecords

    select saleMan,SUM(number*price) as 销售总额,

    case when SUM(number*price) >1000 then '金牌销售员'

    when SUM(number*price) >1000 then '银牌销售员'

    when SUM(number*price) >1000 then '铜牌销售员'

    else '普通销售员'

    end as 称号

    from SaleRecords

    group by saleMan

     

    --练习3:假设有一张家庭账目表

    select * from FamilyRecord

    select rDate,

    case when rMoney>0 then rMoney

    else 0 end as 收入,

    case when rMoney<0 then abs(rMoney)

    else 0 end as 支出

    from FamilyRecord

     

    --case语句第二种语法

    --case 表达式 when value1 then returnValue1

    --       when value2 then returnValue2

    --       ...

    --  else end as [别名]

    --类似于C#中的switch...case

     

    --练习:查询学生信息,显示姓名,学号,性别,

    --其中性别一栏如果是0,则显示’美女‘,

    --如果是1,则显示’帅哥‘

    select stuName,stuName,

    case when stuGender=0 then '美女'

    else '帅哥'

    end as 性别

    from Tbstudent

     

    select stuName,stuNumber,

    case stuGender

    when 0 then '美女'

    when 1 then '帅哥'

    else '人妖' end as 性别

    from Tbstudent

     

     

    --练习:

    select * from Populations

     

    select case country

    when '中国' then '亚洲'

    when '日本' then '亚洲'

    when '美国' then '北美洲'

    when '加拿大' then '北美洲'

    when '法国' then '欧洲'

    else '南极洲' end as ,SUM(population)

     from Populations

     group by case country

    when '中国' then '亚洲'

    when '日本' then '亚洲'

    when '美国' then '北美洲'

    when '加拿大' then '北美洲'

    when '法国' then '欧洲'

    else '南极洲' end

     

    展开全文
  • case 语句

    2019-07-15 18:09:00
    case 语句,只能判断一种条件关系,而if可以判断多种条件关系。 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;;...省略其他分支...*) 如果变量的值都...

    case 语句,只能判断一种条件关系,而if可以判断多种条件关系。

    case $变量名 in
    "值1")
    如果变量的值等于值1,则执行程序1
    ;;
    "值2")
    如果变量的值等于值2,则执行程序2
    ;;
    ...省略其他分支...
    *)
    如果变量的值都不是以上的值,则执行此程序
    ;;
    esac

    例子:
    #!/bin/bash
    read -p "Please choose [yes/no]" -t 30 cho
    case $cho in
    "yes")
    echo "you choose is yes"
    ;;
    "no")
    echo "you choose is no"
    ;;
    *)
    echo "you choose is error"
    ;;
    esac

    转载于:https://www.cnblogs.com/javasl/p/11190509.html

    展开全文
  • case语句与循环语句

    2020-11-03 08:56:52
    case语句的结构 针对变量的不同取值,分别执行不同的命令序列 这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值 格式: case 变量值 in 模式1) ...

    case多分支语句

    case语句的结构

    针对变量的不同取值,分别执行不同的命令序列
    
    这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值
    
    格式:
    case 变量值 in
    模式1)
    	命令序列1
    	;;
    模式2)
    	命令序列2
    	;;
    	....
    *)
    	默认命令序列
    esac
    
    实例:
    case 控制指令 in
    start)
    	启动XX服务
    	;;
    stop)
    	停止XX服务
    	;;
    	....
    *)
    	显示服务脚本的用法
    esac
    

    case语句的实例

    创建一个判断输入类型的脚本

    提示用户输入一个字符
    
    判断出该字符是字母,数字或者其他字符
    
    [root@localhost opt]# vim panduan.sh
    #!/bin/bash
    read -p "请输入一个字符:" aa
    case "$aa" in
    [0-9])
            echo "你输入的是数字"
            ;;
    [a-z]|[A-Z])
            echo "你输入的是字母"
            ;;
    *)
            echo "你输入的是符号"
    esac
    ~  
    [root@localhost opt]# chmod +x panduan.sh 
    [root@localhost opt]# ./panduan.sh 
    请输入一个字符:3
    你输入的是数字
    [root@localhost opt]# ./panduan.sh 
    请输入一个字符:e
    你输入的是字母
    [root@localhost opt]# ./panduan.sh 
    请输入一个字符:#
    你输入的是符号
    

    判断学生成绩的优良

    成绩0-100分
    
    0-59分:不及格
    
    60-74:及格
    
    75-84:良好
    
    85-100:优秀
    
    [root@localhost opt]# vim chengji.sh 
    #!/bin/bash
    read -p "请输入你的成绩:" aa
    case "$aa" in
    #[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])
    [1-5][0-9]|[0-9])
            echo "你的成绩不合格"
            ;;
    6[0-9]|7[0-4])
            echo "你的成绩合格"
            ;;
    7[5-9]|8[0-4])
            echo "你的成绩良好"
            ;;
    8[5-9]|9[0-9]|100)
            echo "你的成绩优秀"
            ;;
    *)
            echo "输入有误"
    esac
    ~       
    
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:0           
    你的成绩不合格
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:59
    你的成绩不合格
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:60
    你的成绩合格
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:74
    你的成绩合格
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:75
    你的成绩良好
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:84
    你的成绩良好
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:85
    你的成绩优秀
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:100
    你的成绩优秀
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:101
    输入有误
    [root@localhost opt]# ./chengji.sh 
    请输入你的成绩:-1
    输入有误
    

    循环语句

    for循环语句
    for语句结构

    读取不同的变量值,用来逐个执行同一组命令
    
    语句结构
    for 变量名 in 取值列表
    do
    	命令序列
    done
    
    语句结构举例
    for 收件人 in 邮件地址列表
    do
    	发送邮件
    done
    

    使用for批量添加用户

    用户名存放在users.txt文件中,每行一个
    
    初始密码均设为123456
    
    [root@localhost opt]# vim user.txt
    zhangsan
    lisi
    wangermazi
    zhaoliu
    tianji
    wangba
    [root@localhost opt]# vim useradd.sh
    #!/bin/bash
    Lists=$(cat /opt/user.txt)
    for bb in $Lists
    do
            useradd $bb
            echo "123456" | passwd --stdin $bb
            echo "$bb添加成功"
    done
    [root@localhost opt]# chmod +x useradd.sh 
    [root@localhost opt]# ./useradd.sh 
    Changing password for user zhangsan.
    passwd: all authentication tokens updated successfully.
    zhangsan添加成功
    useradd: warning: the home directory already exists.
    Not copying any file from skel directory into it.
    Creating mailbox file: File exists
    Changing password for user lisi.
    passwd: all authentication tokens updated successfully.
    lisi添加成功
    Changing password for user wangermazi.
    passwd: all authentication tokens updated successfully.
    wangermazi添加成功
    Changing password for user zhaoliu.
    passwd: all authentication tokens updated successfully.
    zhaoliu添加成功
    Changing password for user tianji.
    passwd: all authentication tokens updated successfully.
    tianji添加成功
    Changing password for user wangba.
    passwd: all authentication tokens updated successfully.
    wangba添加成功
    [root@localhost opt]# cat /etc/passwd | grep "bash"
    root:x:0:0:root:/root:/bin/bash
    dd:x:1000:1000:cn-tangzheng:/home/dd:/bin/bash
    zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
    lisi:x:1002:1002::/home/lisi:/bin/bash
    wangermazi:x:1003:1003::/home/wangermazi:/bin/bash
    zhaoliu:x:1004:1004::/home/zhaoliu:/bin/bash
    tianji:x:1005:1005::/home/tianji:/bin/bash
    wangba:x:1006:1006::/home/wangba:/bin/bash
    
    脚本可以适当修改优化:如
     echo "123456" | passwd --stdin $bb &> /dev/null
    
    
    批量删除用户:在刚刚的基础上修改
    [root@localhost opt]# vim useradd.sh
    #!/bin/bash
    Lists=$(cat /opt/user.txt)
    for bb in $Lists
    do
            userdel -r $bb	'-r 删除家目录'
            #echo "123456" | passwd --stdin $bb &> /dev/null
            echo "$bb删除成功"
    done
    
    [root@localhost opt]# ./useradd.sh 
    zhangsan删除成功
    lisi删除成功
    wangermazi删除成功
    zhaoliu删除成功
    tianji删除成功
    wangba删除成功
    [root@localhost opt]# cat /etc/passwd | grep "bash"
    root:x:0:0:root:/root:/bin/bash
    dd:x:1000:1000:cn-tangzheng:/home/cn-tangzheng:/bin/bash
    

    示例–根据IP地址检查主机状态

    检测IP地址192.168.197.0-192.168.197.10段落
    
    使用ping命令检测各主机的连通性
    
    [root@localhost opt]# vim ipchk.sh 
    #!/bin/bash
    for ((i=1;i<=10;i++))
    do
      ping -c 3 -i 0.2 -W 3 "192.168.197.$i" &> /dev/null
      if [ $? -eq 0 ]
            then
            echo "Host 192.168.197.$i is up"
      else
            echo "Host 192.168.197.$i is down"
      fi
    done
    [root@localhost opt]# ./ipchk.sh 
    Host 192.168.197.1 is up
    Host 192.168.197.2 is up
    Host 192.168.197.3 is down
    Host 192.168.197.4 is down
    Host 192.168.197.5 is down
    Host 192.168.197.6 is down
    Host 192.168.197.7 is down
    Host 192.168.197.8 is down
    Host 192.168.197.9 is down
    Host 192.168.197.10 is down
    

    用循环语句输出1-10的数字的四种办法

    方式一:
    
    #!/bin/bash
    for ((i=1;i<=10;i++))
    do
            echo "$i"
    done
    
    方式二:
    
    #!/bin/bash
    i=1
    for ((;i<=10;i++))
    do
            echo "$i"
    done
    
    方式三:
    
    #!/bin/bash
    i=1
    for ((;i<=10;))
    do
            echo "$i"
            let i++
    done
    
    方式四:
    
    #!/bin/bash
    i=1
    for ((;;))
    do
      if [ $i -le 10 ]
            then
            echo "$i"
            let i++
      else
            exit 0
      fi
    done
    
    输出结果
    
    [root@localhost opt]# ./number.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    shell中let命令

    let 对整数进行数学运算
    
    let和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。
    
    语法格式
    let 表达式
    或
    let "表达式"
    或
    let '表达式'
    以上方式都等价于 ((表达式))
    
    当表达式中含有 Shell 特殊字符(例如 |)时,需要用双引号" "或者单引号' '将表达式包围起来。
    
    和 (( )) 类似,let 命令也支持一次性计算多个表达式,并且以最后一个表达式的值作为整个 let 命令的执行结果。
    

    计算1-10偶数/奇数的和

    方式一:计算偶数的和
    
    #!/bin/bash
    sum=0
    for((i=0;i<=10;i+=2))
      do
            let sum+=$i
      done
            echo "总和为:$sum"
    
    方式一:计算奇数的和
    
    #!/bin/bash
    sum=0
    for((i=1;i<=10;i+=2))
      do
            let sum+=$i
      done
            echo "总和为:$sum"
    
    方式二:求偶数和
    
    #!/bin/bash
    sum=0
    for((i=0;i<=10;i+=2))
      do
            if [ `expr $i % 2` -eq 0 ]
             then
               let sum+=$i
            fi
      done
            echo "总和为:$sum"
    
    方式二:求奇数和
    
    #!/bin/bash
    sum=0
    for((i=1;i<=10;i+=2))
      do
            if [ `expr $i % 2` -eq 1 ]
             then
               let sum+=$i
            fi
      done
            echo "总和为:$sum"
    

    while循环语句

    while语句结构

    重复测试某个条件,只要条件成立则反复执行
    

    语句结构

    while 条件测试操作
    do
    	命令序列
    done
    

    语句结构示例

    while 未猜中正确的价格
    do
    	反复猜测商品价格
    done
    

    while语句应用示例

    使用while循环语句输出1-10数字
    
    #!/bin/bash
    i=0
    while [ $i -le 10 ]
    do
      echo "$i"
      let i++
    done
    
    [root@localhost opt]# ./cccc.sh 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    while死循环

    while true:死循环有时候也有奇效,可与用户交互
    
    #!/bin/bash
    while true
    do
      read -p "请输入yes退出:" KEY
      if [ $KEY = yes ]
            then
              break
      fi
    done
    echo "正常退出"
    
    [root@localhost opt]# ./sixunhuan.sh 
    请输入yes退出:no
    请输入yes退出:1
    请输入yes退出:d
    请输入yes退出:!
    请输入yes退出:a
    请输入yes退出:yes
    正常退出
    

    使用while批量添加用户

    用户名称以stu开头,按数字顺序进行编号
    
    一共添加20个用户,即stu1,stu2…stu20
    
    初始密码设置为
    
    #!/bin/bash
    i=0
    while [ $i -le 19 ]
    do
      let i++
      useradd stu$i
      echo "123456" | passwd --stdin stu$i &> /dev/null
      echo "stu$i添加成功"
    done
    echo "添加完毕"
    
    [root@localhost opt]# ./useradd.sh 
    stu1添加成功
    stu2添加成功
    stu3添加成功
    stu4添加成功
    stu5添加成功
    stu6添加成功
    stu7添加成功
    stu8添加成功
    stu9添加成功
    stu10添加成功
    stu11添加成功
    stu12添加成功
    stu13添加成功
    stu14添加成功
    stu15添加成功
    stu16添加成功
    stu17添加成功
    stu18添加成功
    stu19添加成功
    stu20添加成功
    添加完毕
    

    猜商品价格游戏

    通过变量RANDOM获得随机数
    
    提示用户猜测并记录次数,猜中后退出循环
    
    #!/bin/bash
    A=`expr $RANDOM % 1000`
    i=0
    echo "商品的实际价格为0-999之间,猜猜看是多少?"
    read -p "请输入你猜测的价格数目:" num
    while [ $num -le 999 ] && [ $num -ge 1 ] 
    do
            let i++
         if [ $num -eq $A ]
            then
            echo "恭喜你答对了,实际价格是$A"
            echo "你一共猜测了$i 次"
            exit 0
         elif [ $num -lt $A ]
            then
            echo "太低了"
            read -p "请输入你猜测的价格数目:" num
         else
            echo "太高了"
            read -p "请输入你猜测的价格数目:" num
         fi
      done
    

    continue和break

    continue

    命令格式
    continue n
    n 表示循环的层数:
    如果省略 n,则表示 continue 只对当前层次的循环语句有效,遇到 continue 会跳过本次循环,忽略本次循环的剩余代码,直接进入下一次循环。
    如果带上 n,比如 n 的值为 2,那么 continue 对内层和外层循环语句都有效,不但内层会跳过本次循环,外层也会跳过本次循环,其效果相当于内层循环和外层循环同时执行了不带 n 的 continue。这么说可能有点难以理解,稍后我们通过代码来演示。
    continue 关键字也通常和 if 语句一起使用,即满足条件时便跳出循环。 
    

    break

    命令格式
    break n
    n 表示跳出循环的层数,如果省略 n,则表示跳出当前的整个循环。
    break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
    

    break和continue的区别

    break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
    

    九九乘法表

    #!/bin/bash
    for ((k=1;k<=9;k++))
    do
     for ((i=1;i<=$k;i++))
     do
      echo -n ""$k"x"$i"=$(expr $k \* $i)  "
      if [ $i -eq $k ]
            then
            echo -e '\n'
      fi
     done
    done
    
    [root@localhost opt]# ./99.sh 
    1x1=1  
    
    2x1=2  2x2=4  
    
    3x1=3  3x2=6  3x3=9  
    
    4x1=4  4x2=8  4x3=12  4x4=16  
    
    5x1=5  5x2=10  5x3=15  5x4=20  5x5=25  
    
    6x1=6  6x2=12  6x3=18  6x4=24  6x5=30  6x6=36  
    
    7x1=7  7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49  
    
    8x1=8  8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64  
    
    9x1=9  9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81 
    

    幸运抽奖

    奖池观众:zhangsan,lisi,wangwu
    
    奖池观众名单在name.txt中
    
    共10次投票,使用随机数的方法挑选幸运观众,票数最多获胜
    
    #!/bin/bash
    B=0
    C=0
    D=0
    for ((i=1;i<=10;i++))
    do
     A=$(expr $[RANDOM%3+1])
     list=$(cat /opt/name.txt|grep "$A" |awk -F: '{print $2}')
     case $list in
     zhangsan)
            let B++
     ;;
     lisi)
            let C++
     ;;
     *)
            let D++
      esac
      echo "$list"
    done
    
    [root@localhost opt]# ./luckly.sh 
    lisi
    wangwu
    lisi
    lisi
    wangwu
    zhangsan
    zhangsan
    lisi
    lisi
    wangwu
    zhangsan:2票lisi5票wangwu3票
    [root@localhost opt]# ./luckly.sh 
    zhangsan
    wangwu
    zhangsan
    wangwu
    zhangsan
    lisi
    zhangsan
    wangwu
    wangwu
    wangwu
    zhangsan:4票lisi1票wangwu5票
    

    untli循环语句

    until语句的结构

    重复测试某个条件,只要条件不成立则反复执行
    
    until 条件测试操作
    do
     命令序列
    done
    
    while 未超过10
    do
     数字依次增加
    done
    

    until语句应用1

    计算1–50的和
    
    通过循环累加的方式计算1–50的和
    
    #!/bin/bash
    i=1
    S=0
    until [ $i -eq 51 ]
    do
     let S+=$i
     let i++
    
    done
    echo "$S"
    
    [root@localhost opt]# ./jisuan.sh 
    1275
    

    until语句应用2

    为指定用户发送在线消息
        若指定用户不在线(未登陆系统),则每10分钟(实验中为了测试效果,可改为3s)试一次,直至用户登录系统后再发送信息
        用户名与消息通过为止参数传递给脚本
    
    #!/bin/bash
    username=$1
    #判断格式参数是否为空
    if [ $# -lt 1 ]
     then
     echo "Usage:`basename $0` <username> [<message>]"
     exit 1
    fi
    #判断账号是否存在
    if grep "^$username:" /etc/passwd &> /dev/nell;then :
      else
            echo "用户不存在"
            exit 2
    fi
    #判断用户是否在线
    until who | grep "$username" &> /dev/null
    do
            echo "用户不在线,正在尝试连接"
            sleep 3
    done
    mes=$*
    echo "$mes" | write "$username"
    
    [root@localhost opt]# ./mes.sh 
    Usage:mes.sh <username> [<message>]
    [root@localhost opt]# ./mes.sh wangwu
    用户不存在
    [root@localhost opt]# ./mes.sh stu1
    用户不在线,正在尝试连接
    用户不在线,正在尝试连接
    

    shell函数

    shell函数概述

    shell一个非常重要的特性是它可作为一种编程语言来使用。
    因为shell是一个解释器,所以它不能对为它编写的程序进行编译,而是在每次从磁盘加载这些程序时对它们进行解释。而程序的加载和解释都是非常耗时的。
    针对此问题,许多shell(如BourneAgainShell)都包含shell函数,shell把这些函数放在内存中,这样每次需要执行它们时就不必再从磁盘读入。
    shell还以一种内部格式来存放这些函数,这样就不必耗费大量的时间来解释它们
    shell函数将命令序列按格式写在一起
    可以方便重复使用命令序列
    

    shell函数定义

        其中,return返回的是状态码,需要使用$?调取
    
        echo 返回的是值,使用变量调用
    
        传参:指位置变量
    
    可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    
    参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
    

    调用函数的方法

    函数名 [参数1($1)] [参数2($2)]
    在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
    10不能获取第十个参数,获取第十个参数需要10不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。
    

    shell函数应用1

    两个数字求个
        通过sum(){}定义函数
        使用read命令交互输入两个数并求和
    
    #!/bin/bash
    #sum=0
     function  A (){
      read -p "请输入第一个数字:" B
      read -p "请输入第二个数字:" C
      sum=`expr $B + $C`
      echo "$B + $C = $sum"
      return 3
    }
    #echo $sum
    A $B $C
    
    [root@localhost opt]# ./han.sh 
    请输入第一个数字:4
    请输入第二个数字:2
    4 + 2 = 6
    [root@localhost opt]# echo $?
    3
    [root@localhost opt]# echo $?
    0
    

    shell函数应用2

    编写登录系统后便可使用的自定义函数
        编辑用户自定义函数文件/root/function
        在当前shell中加载可执行的函数文件/root/function
        在~/.bashrc文件中添加source /root/function命令
    

    shell数组

    数组应用场景

    获取数组长度
    
    使用for循环获取具体信息,使用下标或索引标记数组中数据的位置
    
    可以存放多种数据,如:整型,长整形,浮点型(单精度,双精度),字符串等
    
    获取元素长度
    
    遍历元素
    
    元素切片
    
    元素替换
    
    元素删除
    
    …
    
    注意,忌讳数组越界,
    
    数组下标从0开始算
    
    数组长度从1开始算
    
    长度为4,数组长度表示为1,2,3,4;数组下标表示为0,1,2,3
    
    shell中数组是可变长的
    

    数组定义方法(推荐方法一)

    方法一:
    
    基本格式
    数组名=(value0 value1 value2...)
    例如
    ABC=(11 22 33...)
    
    方法二:
    
    基本格式
    数组名=([0]=value [1]=value [2]=value...)
    
    例如
    ABC=([0]=11 [1]=22 [2]=33...)
    
    
    方法三:数组元素之间使用空格隔开
    
    基本格式
    列表名=“value0 value1 value2”
    数组名=($列表名)
    
    
    例如
    AAA=“11 22 33...”
    ABC=($列表名)
    
    
    方法四:
    
    基本格式
    数组名[0]=“value”
    数组名[1]=“value”
    数组名[2]=“value”
    ...
    
    
    例如
    AAA[0]=“11”
    AAA[1]=“22”
    AAA[2]=“33”
    ...
    

    数组包括的数据类型与数组操作

    数组包括的数据类型

    数值类型
    
    字符类型
        使用“”或‘’定义
    
    数组只可存放数值或字符
    

    数组操作

    获取数组长度
    
    基本格式
    ${#数组名[@/*]}
    例如
    [root@localhost opt]# abc=(10 20 30)
    [root@localhost opt]# echo ${abc[*]}
    10 20 30
    [root@localhost opt]# echo ${#abc[*]}
    3
    
    
    读取某下标赋值
    
    基本格式
    ${数组名[下标]}
    例如
    [root@localhost opt]# echo ${abc[1]}
    20
    [root@localhost opt]# echo ${abc[0]}
    10
    [root@localhost opt]# echo ${abc[1]}
    20
    [root@localhost opt]# echo ${abc[2]}
    30
    

    求数组最大值

    #!/bin/bash
    for ((i=1;i<=5;i++));do
      read -p "请输入第$i个数字:" num
      abc[$i-1]=$num
    done
    
    max=${abc[0]}
    for ((k=1;k<=${#abc[*]}-1;k++));do
      if [ $max -lt ${abc[$k]} ];then
       max=${abc[$k]}
      fi
    done
    echo "最大值是:$max"   
    
    [root@localhost opt]# chmod +x max.sh 
    [root@localhost opt]# ./max.sh 
    请输入第1个数字:2
    请输入第2个数字:3
    请输入第3个数字:66
    请输入第4个数字:33
    请输入第5个数字:111
    最大值是:111
    
    展开全文
  • case语句实战

    千次阅读 2018-02-08 00:25:50
    大家好,今天给大家带来的是Shell编程之case语句的使用! 其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下: case...

    大家好,今天给大家带来的是Shell编程之case语句的使用!

     

    其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下:

     

    case 变量名 in
    	值1)
    	  指令1
    	;;
    	值2)
    	  指令2
    	;;
    	值3)
    	  指令3
    	;;
    esac

    在以上的代码中我们发现,以case开头,以esac结尾,就像我们的if语句,以if开头以fi结束时一样的。

    例2:

     

    case "找老公条件" in
    	 家里有房子)
    		嫁给你...
    	;;
    	 家庭有背景)
    		嫁给你...
    	;;
    	 很努力吃苦)
    	    那么我们可以先谈男女朋友..
    	;;
    esac

    好了接下来我们实践,其实语法就是上面的一些基本语法,那么我么在实践中来体会case到底有什么用

    其实自我认为case语句更适合一些菜单选项的脚本,那么我们先用if语句写一个菜单脚本如下:

     

    #!/bin/bash
    #!/bin/bash
    # Date: 4:42 2018-2-5
    # Mail: ywyankerp@163.com
    # Founder: <YanKai>
    # Describe: This is a one - button installation service script 
    function CDAN(){
    cat << yankerp  
    1.米饭
    2.面条
    3.包子
    yankerp
    }
    CDAN
    read -p 请您输入您今天要吃什么: NUM
    expr $NUM + 1 &>/dev/null
    if [ "$?" -ne 0 ]
      then
        echo "请您输入{1|2|3}" 
        exit 1
    fi
    
    if [ "$NUM" -eq 1 ]
       then
         echo "小二,来一碗米饭"
    elif [ $NUM -eq 2 ]
       then
         echo "小二,来一碗面条"
    elif [ "$NUM" -eq 3 ]
       then
         echo "小二,来一锅包子"
    fi

    首先我们看到我们上面的if语句,是不是感觉有点繁琐,那么接下来我们使用case语句来实现 如下:

     

    #!/bin/bash
    #!/bin/bash
    # Date: 4:42 2018-2-5
    # Mail: ywyankerp@163.com
    # Founder: <YanKai>
    # Describe: This is a one - button installation service script 
    function CDAN(){
    cat << yankerp  
    1.米饭
    2.面条
    3.包子
    yankerp
    }
    CDAN
    read -p 请您输入您今天要吃什么: NUM
    expr $NUM + 1 &>/dev/null
    if [ "$?" -ne 0 ]
      then
        echo "请您输入{1|2|3}" 
        exit 1
    fi
    
    case $NUM in
            1)
              echo "小二,来一碗米饭"
            ;;
            2)
              echo "小二,来一碗面条"
            ;;
            3)
              echo "小二,来一锅包子"
            ;;
    esac

     

     

     

    剖析时刻:

     

    #!/bin/bash
    #!/bin/bash
    # Date: 4:42 2018-2-5
    # Mail: ywyankerp@163.com
    # Founder: <YanKai>
    # Describe: This is a one - button installation service script 
    function CDAN(){   #定义一个CDAN的函数
    cat << yankerp     
    1.米饭
    2.面条
    3.包子
    yankerp
    }
    CDAN             #调用CDAN函数
    read -p 请您输入您今天要吃什么: NUM   #输入一条提示,然后把用户输入的字符串赋值给变量NUM
    expr $NUM + 1 &>/dev/null          # 使用数值运算命令expr来确定用户输入的是否是数值
    if [ "$?" -ne 0 ]                  #如果用户输入的不是数值
      then            #那么
        echo "请您输入{1|2|3}"     #打印出 1 2 3 
        exit 1              #最后退出脚本
    fi                #结束if语句
    
    case $NUM in       #这里就是我们的case语句了,简单理解,在NUM这个变量中
            1)              #如果用户输入的是1
              echo "小二,来一碗米饭"       #那么就输出一行来一碗米饭
            ;;
            2)                          #如果在NUM变量中用户输入的是2
              echo "小二,来一碗面条"   #那么继续打印此内容
            ;;
            3)                           #以此类推
              echo "小二,来一锅包子"
            ;;
    esac             #最后使用esac结束
    

     

    觉得不够养眼?没有关系如下图:

     

    我们发现,在多个选项的这些脚本中呢,还是使用case语句是比较方便合适的。

     

    那么我们掌握了基本的语法和它的一些功能,那么我们可以结合函数+case语句来完成一个菜单式的安装脚本如下:

     

    #!/bin/bash
    # Date: 4:42 2018-2-5
    # Mail: ywyankerp@163.com
    # Founder: <YanKai>
    # Describe: This is a one - button installation service script 
    function CDAN(){
    cat << yankerp  
    +------------------------------------------------+
    |                                                |
    |        _o0o_          1. 安装Nginx             |
    |        08880          2. 安装Apache            |
    |       88"."88         3. 安装MySQL             |
    |       (|-_-|)         4. 安装PHP               |
    |        0\=/0          5. 部署LNMP环境          |
    |      __/   \__        6. 安装zabbix监控        |
    |     ‘\   ///‘         7. 退出此管理程序        |
    |    / Linux一键 \      8. 关闭计算机            |
    |  ||    Server   ||    ======================   |  
    |  \                 一键安装服务            |
    |   |||  i i i    |||               by Yankerp   |
    |   ___        ___      ======================   |
    |___‘.  /--.--\ .‘___                            |
    +------------------------------------------------+
    yankerp
    }
    CDAN
    . /etc/init.d/functions
    BASE_DIR=/usr/local/src
    read -p "请您输入1-8任意字符:" NUM
    expr $NUM + 1 &>/dev/null
    if [ "$?" -ne 0 ]
      then
        echo "请您输入{1|2|3|4|5|6|7|8}"
        exit 1
    fi
    
    function Nginx_server (){
    	echo "开始安装Nginx请稍后...."
    	yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel &>/dev/null
        cd $BASE_DIR && wget http://nginx.org/download/nginx-1.12.2.tar.gz &>/dev/null  && useradd -M -s /sbin/nologin nginx && \
    tar zxf nginx-1.12.2.tar.gz && cd $BASE_DIR/nginx-1.12.2/ && \ 
    	./configure  --prefix=/usr/local/nginx --with-http_dav_module--with-http_stub_status_module --with-http_addition_module --with-http_sub_module  --with-http_flv_module --with-http_mp4_module--with-pcre --with-http_ssl_module --with-http_gzip_static_module  --user=nginx --group=nginx &>/dev/null
    	if [ "$?" -eq 0 ]
    	  then
    		make && make install &>/dev/null
    	fi
    if [ -f /usr/local/nginx/sbin/nginx ];then
        ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin && nginx && echo "Nginx安装成功!"
    fi
    }
               
    function Apache_server (){
    	echo "开始安装Apache请稍后"
    	yum install httpd -y &>/dev/null
    	if [ "$?" -eq 0 ]
    	  then 
    	    echo "Apache安装成功!"
    	  else
    	    echo "Apache安装失败!"
      	fi
    }
    
    case $NUM in
    	1)
    	  Nginx_server
    	;;
    	2)
    	  Apache_server
    	;;
    esac	
    

     

    运行结果如下:

     

    以上脚本大家可以参考参考,很简单实现,那么接下来在来一个案例

     

    实战2:编程Nginx启动脚本

    编译安装的Nginx是没有启动脚本的,这时候我们可以选择自己写一个,在这里我用我的思路给大家解释整个过程虽然不是很规范,希望还是能够帮助到你如下:

     

    #!/bin/bash
    BASE_DIR=/usr/local/nginx/sbin/
    PID=/usr/local/nginx/logs/nginx.pid
    #no1.判断是否root用户登录
    if [ "$UID" -ne 0 ]
      then
        echo "请您使用root用户登录!!!"
      exit 1
    fi
    . /etc/init.d/functions 
    #判断用户输入的传参个数
    if [ "$#" -ne 1 ]
        then
           echo "/bin/bash $0 {start|stop|restart}"
    	exit 1
    fi
    
    #编写启动Nginx函数
    function start (){
    	if [ `netstat -anput | grep nginx | wc -l` -eq 0 ]
    	   then
    	     $BASE_DIR/nginx
    	fi
    	   if [ "$?" -eq 0 ]
    	     then
    	       action "Nginx启动成功!" /bin/true
    	     else
    	       action "Nginx启动失败!" /bin/false
    	   fi
    }
    
    #编写停止Nginx函数
    function stop (){
    	if [ `netstat -anput | grep nginx | wc -l` -ne 0 ]
    	   then
    	     $BASE_DIR/nginx -s stop
    	fi
    	   if [ "$?" -eq 0 ]
    	      then
          		action "Nginx停止成功!" /bin/true
    	      else
    	        action "Nginx停止失败!" /bin/false
    	   fi
    }
    
    #编写case语句 使用特殊的位置变量$1来判断用户输入的内容
    case  $1 in
    	start)
    	      start
    	;;
    	stop)
    	      stop
    	;;
            restart)
    	      stop
    	      start
    	;;
    esac
    

     

    运行如下:

     

    一张图更清晰解释

     

    本次就到这里,希望对您有所帮助,再见!

     

    旺旺狗年,幸福吉祥。祝大家2018新年快乐!害羞

     

     

     

     

     

     

     

     

    展开全文
  • switch case 语句

    2019-07-16 19:17:28
    switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 语法: switch(expression){ ...//你可以有任意数量的case语句 default : //可选 //语句 } switch case 语句有如...
  • sql 语句caseHey, folks! Hope you all are doing well. In this article, we will be understanding the working of SQL ... 在本文中,我们将了解SQL CASE语句的工作。 什么是SQL CASE语句? (What is SQL C...
  • switch case语句

    千次阅读 2019-04-26 17:43:30
    switch case语句switch case语法 switch case语法 switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 default : //可选 ...
  • Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 ...
  • 介绍Bash Case 语句

    2020-09-15 17:50:14
    本文介绍bash中case语句的语法。case语句通常用于简化多种不同选择的复杂条件场景,使用case代替if使得脚本代码更易读、易维护。 case语句与C语言、javasc中的switch语句类似。与C不同的是,一旦Bash中case语句匹配...
  • Java switch case 语句

    2020-01-23 12:58:43
    Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 语法 switch case 语句语法格式如下: switch(expression){ case value : //语句 break; //可选...
  • case语句使用于需要进行多重分支的应用情况格式:case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ;; esac case语句结构特点如下: case行尾必须为单词 in 每个模式...
  • CASE语句与CASE表达式

    2014-11-25 18:12:48
    CASE语句与CASE表达式 转自:http://blog.csdn.net/leshami/article/details/7340187 case语句与case表达式是plsql流程控制的重要组成部分,尽管其使用方法较为简单,但容易混淆。 本文将描述case语句与case表达式...
  • If 语句 VS Select Case 语句

    千次阅读 2018-01-24 21:16:17
    在“研磨”百例的过程中,突然发现"If 语句" 和 "Select Case 语句"有异曲同工之妙,于是果断把实例2“蹂躏”一番。 实例:要求用Select Case 语句实现成绩等级优、良、中、差、不及格,90分以上是优、80-90是良、...
  • Oracle CASE语句

    千次阅读 2013-11-19 16:38:40
    CASE语句从一个条件序列中选择并执行相应的语句。CASE语句主要包含两种类型: 简单CASE语句,计算单个表达式值,并于几个可能值进行比较。搜索CASE语句,计算多个布尔表达式,并选择第一个值为true。 CASE语句适合...
  • switch语句和case语句的特性

    千次阅读 2019-04-06 11:11:48
    ** switch语句和case语句的特性 ** switch语句格式: switch(表达式) { case 常量值1: 语句体1; break; case 常量值2: 语句体2; break; ... default: 语句体n+1; b...
  • switch case语句,多个case匹配相同的情况:

    万次阅读 多人点赞 2018-08-20 11:35:43
    switch case语句,多个case匹配相同的情况: case 4: case 6: case 9: case 11: numDays = 30; break;
  • case语句,函数

    2020-07-16 03:12:48
    一.case语句语法结构 1.工作原理: case语句为多重匹配语句 如果匹配成功,执行相匹配的命令 2. 语法结构 case var in pattern 1) command 1 pattern 2) command 2 *) command 3 ;; esac 3. 应用案例:...
  • shell编程之case语句与for循环语句 case分支语句 case语句可以使脚本程序的结构更加清晰,层次分明。 case语句的结构: 适用情况:某个变量存在多种取值,对每种取值执行不同的命令序列。与if相识,不过if是判断不同...
  • case语句使用举例

    万次阅读 2017-10-16 20:21:58
    shell中的case语句: 可以把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。 使用格式: case 匹配母板 in 模板1 [ | 模板2 ] … ) 语句组 ;; 模板3 [ | 模板4 ] … ) 语句组 ...
  • switch-case语句中,case下的语句问题
  • C语言switch case语句详解

    千次阅读 多人点赞 2020-02-22 10:36:58
    当分支比较少的时候我们使用if else语句解决,当分支比较多的时候,我们要使用switch case语句解决,针对分支的复杂性选择合适的程序解决。 当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对...
  • switch-case语句

    2020-11-07 14:35:39
    switch-case语句 1、格式 switch(表达式){ case 值1: 表达式的值和值1匹配上了,需要执行的代码; break; case 值2: 表达式的值和值2匹配上了,需要执行的代码; break; case 值3: 表达式的值和值3匹配上了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,522
精华内容 10,208
关键字:

case语句