zoukankan      html  css  js  c++  java
  • Shell

    示例脚本及注释

    1 - arguments

    
    #!/bin/bash
    
    if [ -n "$1" ];then # 验证参数是否传入
      echo "The first parameter is ${1}."
    else
      echo "No arguments!"
    fi
    
    echo '$0 当前shell脚本的名称:' $0
    echo '$0 当前shell脚本的PID:' $$
    echo '$* 当前shell脚本的所有参数:' $*
    echo '$@ 当前shell脚本的所有参数:' $@
    echo '$# 当前shell脚本的参数个数:' $#
    
    for param in "$*" # 遍历$*
    do
      echo "$* Parameters : $param"
    done
    
    for param in "$@" # 遍历$@
    do
      echo "$@ Parameters : $param"
    done
    
    
    
    ### 依次读取当前shell脚本的所有输入参数
    while [ -n "$1" ] 
    do
      echo "参数为:$1, 参数个数为:$#"
      shift # shift命令将参数变量左移一个位置
    done
    
    
    
    
    
    #   ### 执行脚本时,通过对应的位置参数和特殊变量来完成输入;
    #   $0  当前shell脚本的名称
    #   $n  当前shell脚本的第n个参数,$1是第一个参数,$2是第二个参数,${10}是第十个参数
    #   $*  当前shell脚本的所有参数(不包括脚本本身),将所有参数当作一个字符串整体
    #   $@  当前shell脚本的所有参数(不包括脚本本身),循环遍历所有参数  
    #   $#  当前shell脚本的参数个数(不包括脚本本身)
    #   $$  当前shell脚本的PID
    #   $?  最后一个指令的返回值(退出状态);0表示没有错误,非0表示有错误
    #   
    #   
    #   ### 移动参数变量
    #   - shift命令将移动命令行参数变量左移一个位置,$2变量的值将会移动到$1,而$1变量的值将会被删除,且不能恢复;但是$0变量的值不变;
    #   - “shift n”表示移动n个位置;
    
    

    2 - shift

    
    #!/bin/bash  
    
    if [ -z "$1" ] # -z 字符串的长度为零 
    then
      echo "No arguments!"
    fi
    
    function show_help(){
      echo "Usage:"
      echo "    ./$0 -a    Option A"
      echo "    ./$0 -b    Option B"
      echo "    ./$0 -c    Option C" 
      echo "    ./$0 -h    Show help information"
    }
    
    count=1
    while [ -n "$1" ] # 判断参数是否存在;–n 字符串的长度非零 
    do
    
      echo "第 $count 个命令行参数 : $1"  
      count=$[ $count+1 ]  
    
      case $1 in
        -a) echo "Perform action A" ;;
        -b) echo "Perform action B" ;;
        -c) echo "Perform action C" ;;
        -h) show_help ;;
        *)  echo "$1 is not an option!" 
            break ;;
      esac
      
      shift # 命令行参数值左移一位 
      # shift 2 # 使用"shift n"对命令行参数左移n位
      
    done
    
    
    
    
    
    #   ### 简单的命令行选项(只有选项,没有参数)
    #   - 适合使用shift命令和case语句处理
    #   
    #   
    #   ### shift命令
    #   - shift命令能够改变命令行参数的相对位置;
    #   - 默认将每个参数变量左移一个位置;变量$3的值移给变量$2,变量$2的值移位给变量$1,而变量$1的值被丢弃;变量$0的值和程序名称都保持不变;
    #   - 特别注意:将某一位参数移位掉后,该参数值永久丢失,不可恢复;
    #   - “shift n”表示移动n个位置;
    #   
    #   
    #   ### case语句
    #   - 本例中,case语句会匹配和执行所有的有效选项;
    #   - 如果只想匹配和执行第一个有效选项,不使用while循环和shift命令即可;
    #   - case语句的catch-all部分可以处理其他参数;
    
    

    3 - read

    
    #!/bin/sh
    
    echo -n "Enter your name:" # “echo -n”移掉字符串末尾的换行符,允许紧跟其后输入数据
    read -t 5 name # 设置超时时间为3秒
    echo "Hi, $name !"
    
    read -p "Enter your age:" age  # -p选项,在read命令中指定提示
    days=$[ $age * 365 ]
    echo "$days days !"
    
    read -s -p "What do you want :" w1 w2 # 指定多个变量来获取多个输入
    echo "You want to get more $w1 and $w2 !"
    
    read -n1 -p "Do you want to continue [Y/N]?" answer # -n1选项,接受到一个字符就退出
    case $answer in
        Y | y)
        echo -e "
     Continue!";;
        N | n)
        echo -e "
     Goodbye!";;
        *)
        echo -e "
     Error Choice!";;
    esac
    
    
    
    ### 示例:read命令从文件中读取内容的方法
    echo -e "aaa
    222
    ccc" > test.log # 创建示例文件
    cat test.log
    
    # count=1
    # cat test.log | while read line
    # do
    #    echo "Line $count : $line"
    #    count=$[ $count + 1 ]
    # done
    
    # cat test.log | 
    # while read CMD; do
    #     echo $CMD
    # done
    
    while read CMD; do
        echo "$CMD"
    done < test.log
    
    rm -rf test.log
    
    exit 0
    
    
    
    
    
    #   ### 在脚本运行时,通过read命令以交互的方式获取输入
    #   - 在脚本中使用“read variable”获取标准输入,并将数据存放到标准变量中;使用“$varialbe”调用输入;
    #   - read命令可以指定多个变量来获取多个输入;如果输入的值多于变量,多出的值会统一分配给最后一个变量;
    #   - 如果不指定变量,read命令会将所有接收到的数据都放到特殊环境变量REPLY中;
    #   
    #   
    #   ### read命令常用选项
    #   -p : 省略echo命令并指定变量名字,可以多个变量;
    #   -t <n> : 设置超时时间为n秒;
    #   -n<n> : 当输入的字符数目达到预定数目n时,自动退出,并将输入的数据赋值给变量;
    #   -s : 隐藏输入(不显示输入的数据),但实际上只是将输入字符的颜色设置与背景色相同;
    #   
    #   
    #   ### read命令从文件中读取内容
    #   - 利用管道和while循环,可以实现逐行读取文件内容;
    #   - 如果文件为空(没有数据),read命令会退出并返回非零退出状态码;
    
    

    4 - getopts

    
    #!/bin/bash
    
    function show_help(){
      echo "Usage:"
      echo "    ./$0 -a               option A"
      echo "    ./$0 -b <paramter>    option B"
      echo "    ./$0 -c <paramter>    option C" 
      echo "    ./$0 -h               Show help information"
    }
    
    if [ -z "$1" ]
    then
      echo "No arguments!"
      show_help
      exit 1
    fi
    
    str="$1"
    if [ "${str:0:1}" != "-" ] || [ -z "${str:1:2}" ]; then 
      echo "Invalid option!"
      exit 1
    fi
    
    while getopts "ab:c:h" opt; 
    do
      case "$opt" in
        a) echo "Perform an action A"
           echo "Next option index : $OPTIND";;
        b) echo "Perform an action B with parameter value $OPTARG"
           echo "Next option index : $OPTIND";;
        c) echo "Perform an action C with parameter value $OPTARG"
           echo "Next option index : $OPTIND";;
        h) show_help;;
        ?) echo "Invalid option or parameter!"
           show_help
           exit 1;;
      esac
    done
    
    
    
    
    
    #   ### getopt和getopts
    #   - getopt和getopts命令可用于解析所有命令行参数,能够使Shell脚本实现选项列表的功能;
    #   - getopt是外部命令,可以支持长选项和可选参数;
    #   - getopts是shell内置命令,能够处理选项和参数之间的空格;自动去除选项前的破折号;但无法处理非-开头的选项;
    #   
    #     
    #   ### getopts命令
    #   - 使用形式:“getopts <optstring> <variable>”
    #   - 如果选项字符串optstring以冒号开始,表明禁止输出错误消息;如果其中的选项以冒号结尾,表明此选  项需要参数值;
    #   - 当前参数放在variable中;
    #   - 选项必须在其参数之前,而且必须用空格分开;
    #   - 如果需要参数的选项没有指定参数,将向标准错误中写入错误消息;
    #   
    #   
    #   ### getopts命令的变量
    #   - $OPTARG变量保存选项的参数值;
    #   - $OPTIND变量保存原始$*中下一个要处理的选项位置;
    #   - $OPTIND初值为1,遇到不带参数的选项将“optind += 1”,遇到带参数的选项将“optind += 2”
    
    
  • 相关阅读:
    php 转化整型需要注意的地方
    生成6位随机数
    php://input
    ios常见问题 经验之谈
    ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作
    ios根据文本自适应 然后 搭建类似如下效果
    iosTableView 局部全部刷新以及删除编辑操作
    ios打开系统自带APP
    iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)
    ios UIApplocation 中APP启动方式
  • 原文地址:https://www.cnblogs.com/anliven/p/7360839.html
Copyright © 2011-2022 走看看