zoukankan      html  css  js  c++  java
  • 【Linux】【Shell】【Basic】流程控制

    1. 选择执行:

    1.1. if

    单分支的if语句:

    if  测试条件
    then
        代码分支
    fi
    

      

    双分支的if语句:

    if  测试条件; then
        条件为真时执行的分支
    else
        条件为假时执行的分支
    fi
    

      

    示例:通过参数传递一个用户名给脚本,此用户不存时,则添加之;

    #!/bin/bash
    #
    if ! grep "^$1>" /etc/passwd &> /dev/null; then
        useradd $1
        echo $1 | passwd --stdin $1 &> /dev/null
        echo "Add user $1 finished."
    fi
    

      

    #!/bin/bash
    #
    if [ $# -lt 1 ]; then
        echo "At least one username."
        exit 2
    fi
    
    if ! grep "^$1>" /etc/passwd &> /dev/null; then
        useradd $1
        echo $1 | passwd --stdin $1 &> /dev/null
        echo "Add user $1 finished."
    fi		
    

      

    #!/bin/bash
    #
    if [ $# -lt 1 ]; then
        echo "At least one username."
        exit 2
    fi
    
    if grep "^$1>" /etc/passwd &> /dev/null; then
        echo "User $1 exists."
    else
        useradd $1
        echo $1 | passwd --stdin $1 &> /dev/null
        echo "Add user $1 finished."
    fi
    

      

    练习:通过命令行参数给定两个数字,输出其中较大的数值;

    #!/bin/bash
    #
    if [ $# -lt 2 ]; then
        echo "Two integers."
        exit 2
    fi
    
    if [ $1 -ge $2 ]; then
        echo "Max number: $1."
    else
        echo "Max number: $2."
    fi
    

      

    #!/bin/bash
    #
    
    if [ $# -lt 2 ]; then
        echo "Two integers."
        exit 2
    fi
    
    declare -i max=$1
    
    if [ $1 -lt $2 ]; then
        max=$2
    fi
    
    echo "Max number: $max."
    

      

    练习:通过命令行参数给定一个用户名,判断其ID号是偶数还是奇数;

    练习:通过命令行参数给定两个文本文件名,如果某文件不存在,则结束脚本执行;

    都存在时返回每个文件的行数,并说明其中行数较多的文件;

    1.2. case

    语法格式:

    case  $VARAIBLE  in  
    PAT1)
        分支1
        ;;
    PAT2)
        分支2
        ;;
    ...
    *)
        分支n
        ;;
    esac
    

      

    case支持glob风格的通配符:
    *:任意长度的任意字符;
    ?:任意单个字符;
    []:范围内任意单个字符;
    a|b:a或b;

    示例:写一个服务框架脚本;

    $lockfile,  值/var/lock/subsys/SCRIPT_NAME

    (1) 此脚本可接受start, stop, restart, status四个参数之一;
    (2) 如果参数非此四者,则提示使用帮助后退出;
    (3) start,则创建lockfile,并显示启动;stop,则删除lockfile,并显示停止;restart,则先删除此文件再创建此文件,而后显示重启完成;status,如果lockfile存在,则显示running,否则,则显示为stopped.

    #!/bin/bash
    #
    # chkconfig: - 50 50
    # description: test service script
    #
    prog=$(basename $0)
    lockfile=/var/lock/subsys/$prog
    
    case $1  in
    start)
    	if [ -f $lockfile ]; then
    		echo "$prog is running yet."
    	else
    		touch $lockfile
    		[ $? -eq 0 ] && echo "start $prog finshed."
    	fi
    	;;
    stop)
    	if [ -f $lockfile ]; then
    		rm -f $lockfile
    		[ $? -eq 0 ] && echo "stop $prog finished."
    	else
    		echo "$prog is not running."
    	fi
    	;;
    restart)
    	if [ -f $lockfile ]; then
    		rm -f $lockfile
    		touch $lockfile
    		echo "restart $prog finished."
    	else
    		touch -f $lockfile
    		echo "start $prog finished."
    	fi
    	;;
    status)
    	if [ -f $lockfile ]; then
    		echo "$prog is running"
    	else
    		echo "$prog is stopped."
    	fi
    	;;
    *)
    	echo "Usage: $prog {start|stop|restart|status}"
    	exit 1
    esac
    

      

    2. 循环执行

    2.1. for

    进入条件:列表元素非空

    退出条件:列表元素遍历完成

    2.2. while

    进入条件:条件测试结果为“真”

    退出条件:条件测试结果为“假”

    2.3. until

    进入条件:条件测试结果为“假”

    退出条件:条件测试结果为“真”

    2.4. continue:提前结束本轮循环,而直接进入下一轮循环的判断

    示例:求100以内所有偶数之和

    #!/bin/bash
    #
    declare -i sum=0
    declare -i i=1
    
    until [ $i -gt 100 ]; do
        let sum+=$i
        let i++
    done
    
    echo $sum			
    

      

    #!/bin/bash
    #
    declare -i sum=0
    declare -i i=1
    
    while [ $i -le 100 ]; do
        let sum+=$i
        let i++
    done
    
    echo $sum	
    

      

    练习:分别使用for, while, until实现
    1、分别求100以内所有偶数之和,100以内所奇数之和;
    2、创建10个用户,user101-user110;密码同用户名;
    3、打印九九乘法表;
    4、打印逆序的九九乘法表;

  • 相关阅读:
    [ html canvas 案例 -- 绘制文本图片 ] canvas案例 -- 绘制文本图片演示
    [ javascript 创建随机颜色 ] 多种方式来创建随机颜色
    [ html canvas shadowOffsetX shadowOffsetY shadowBlur shadowColor ] canvas绘图属性 shadowOffsetX shadowOffsetY shadowBlur shadowColor 属性演示
    [ html canvas font textAlign textBaseline measureText().width ] canvas绘图属性 font textAlign textBaseline measureText().width 属性演示
    [ html canvas ] canvas绘制太阳系实例代码
    [ html canvas quadraticCurveTo ] canvas绘图quadraticCurveTo()属性研究实例演示之二
    [ html canvas arcTo ] canvas绘图 arcTo()属性研究实例演示之二
    [ html createLinearGradient createRadialGradient 绘制背景渐变方式 ] canvas绘制渐变 createLinearGradient createRadialGradient 绘制背景渐变方式 属性实例
    hadoop常见问题汇总
    hive数据导入
  • 原文地址:https://www.cnblogs.com/demonzk/p/6514235.html
Copyright © 2011-2022 走看看