shell脚本之脚本接收选项

1.创建一个脚本,能为其他脚本添加脚本信息:
    #vim cs.sh
        #!/bin/bash
        cat > $1 <<EOF
        #!/bin/bash
        #Name: `basename $1`
        #Description:
        #Author:TEST
        #Version:0.0.1
        #Datatime:`date "+%F +%T"`
        #Usage:`basename $1`

EOF
        vim +8 $1

2.修改脚本,若打开的脚本中有内容,则直接打开,若为空则添加信息。
    #vim cs.sh
        #!/bin/bash
        if ! grep “[^[::space]]” $1 &> /dev/null ; then
            cat > $1 <<EOF
            #!/bin/bash
            #Name: `basename $1`
            #Description:
            #Author:TEST
            #Version:0.0.1
            #Datatime:`date "+%F +%T"`
            #Usage:`basename $1`

EOF
             vim +8 $1
        fi
        vim  + $1

3.修改脚本,添加语法测试功能。若有错误让用户选择是否退出编辑。
     #vim cs.sh
        #!/bin/bash
        if ! grep “[^[::space]]” $1 &> /dev/null ; then
            cat > $1 <<EOF
            #!/bin/bash
            #Name: `basename $1`
            #Description:
            #Author:TEST
            #Version:0.0.1
            #Datatime:`date "+%F +%T"`
            #Usage:`basename $1`

EOF
             vim +8 $1
        fi
        vim  + $1

until banshi -n $1 &> /dev/null ;do
            read  -p "Syntax error ,q|Q for quit,others for edit." OPT
            case $1 in {
                q|Q )
                    echo "quit"
                    exit 5
                    ;;
                *)
                      vim + $1
                      ;;
            }
            esac
        done

chmod +x $1

4.使用刚才的cs.sh创建脚本,并为脚本添加选项的功能。:
    #./cs.sh opt.sh
             #!/bin/bash
            #Name: opt.sh
            #Description:
            #Author:TEST
            #Version:0.0.1
            #Datatime:xxxx-xxxx
            #Usage:opt.sh
            function USAGE() {
                echo "Usage:  opt.sh [-b|-d] args"

}
            while getopts  ":b:d:"  SW ;do
                case $SW in
                    b)
                        echo "the option is  b"
                        echo $OPTARG
                        ;;
                    d)
                        echo "the option is d"
                        echo $OPTARG
                        ;;
                    \?)
                        echo "wrong options"
                        USAGE
                        ;;
                esac
            done
        #./opt.sh -b test1
        #./opt.sh -d test2
        #./opt.sh -c test3

5.修改 sc.sh,创建脚本时使用选项让用户输入description。
      #vim cs.sh
        #!/bin/bash
        while getopts ":d:" SW;do
            case $SW in
                d)
                    DESC=$OPTARG
                \?)
                    echo "Usage: sc.sh [-d DESCRIPTION] FILENAME"
            esca
        done

shift $[$OPTIND-1]

if ! grep “[^[::space]]” $1 &> /dev/null ; then
            cat > $1 <<EOF
            #!/bin/bash
            #Name: `basename $1`
            #Description:$DESC
            #Author:TEST
            #Version:0.0.1
            #Datatime:`date "+%F +%T"`
            #Usage:`basename $1`

EOF
             vim +8 $1
        fi
        vim  + $1

until banshi -n $1 &> /dev/null ;do
            read  -p "Syntax error ,q|Q for quit,others for edit." OPT
            case $1 in {
                q|Q )
                    echo "quit"
                    exit 5
                    ;;
                *)
                      vim + $1
                      ;;
            }
            esac
        done

chmod +x $1

6.编辑opt.sh,查看OPTIND的具体情况。
    #vim opt.sh
        #!/bin/bash
        #Name: opt.sh
        #Description:
        #Author:TEST
        #Version:0.0.1
        #Datatime:xxxx-xxxx
        #Usage:opt.sh
        function USAGE() {
            echo "Usage:  opt.sh [-b|-d] args"

}
        while getopts  ":bd"  SW ;do
            case $SW in
                b)
                    echo "the option is  b"
                    echo $OPTARG
                    echo $OPTIND
                    ;;
                d)
                    echo "the option is d"
                    echo $OPTARG
                    echo $OPTIND
                    ;;
                \?)
                    echo "wrong options"
                    USAGE
                    ;;
            esac
        done
    #./opt.sh -b
        2
    #./opt.sh -b -d
        2
        3
7.写一个脚本ift.sh,可以接受选项 i I a ,要求如下:
    usage如下: ift.sh [-i INTERFACE|-I  IP| -a ]
    -i 显示指定网卡的ip地址,-I 显示IP地址对应的接口,-a显示出io接口外的所有接口和ip信息。

#vim ift.sh
        #!/bin/bash
        SHOWIP() {
            if  ! ifconfig|grep -o "^[^[:space:]]\{1,\}" |grep $1 &> /dev/null; then
                return 15
            fi

echo -n "${1}: "
            ifconfig $1 |grep -o "inet addr:[0-9\.]\{1,\}" |cut -d: -f2
            echo
        }

SHOWIF(){
            if ! ifconfig |grep  -o "inet addr:[0-9\.]\{1,\}" |cut -d: -f2|grep $1 &> /dev/null;then
                return 16
            fi

echo -n "${1}:"
            ifconfig |grep -B 1 "$1" |grep -o "^[^[:space:]]\{1,\}"
            echo
        }

SHOWALL(){
          暂时没想出来 先空着!!稍后补齐

}

while getopts  ":i:I:a:" SW ;do
            case $SW in
                i)
                    SHOWIP $OPTARG
                    if [$? -eq 15] && echo "wrong interface!"
                    ;;
                I)
                    SHOWIF $OPTARG
                    f [$? -eq 16] && echo "wrong ip!"
                    ;;
                a)
                    SHOWALL
                    ;;

\?)
                    echo “Usage ift.sh [-i INTERFACE|-I  IP| -a ]”
                    ;;
            esac

#getopts "[:]OPTION[:]..." [OPTARG]
    内置参数:
        OPTARG 参数
        OPTIND 选项索引,脚本中有多个选项时,最开始指向第二个选项,注意不是第一个!! 。使用shift后则指向第三个选项,以此类推。

OPTION 选项可以有多个,如果参数后边有 OPTARG选项内置的参数,选项后如果后参数,则要在选项后边加上冒号(:)。
    若不想输出错误信息,则在所有选项最前头加上冒号(:)。
    注意,一次只能跟一个选项,不能跟多个。

时间: 2024-11-03 10:52:32

shell脚本之脚本接收选项的相关文章

使用getopts命令解析shell脚本的命令行选项

转自:http://yejinxin.github.io/parse-shell-options-with-getopts-command/ 标准的Unix命令一般都提供很多选项,使用者通过命令行提供具体的选项和参数,格式如下: command -options parameters filename getopts是shell内建的一个命令,它可以帮助我们处理命令行选项,使得我们的脚本也可以与unix命令保持风格一致.getopts的用法格式为: getopts option_string v

Shell编程(脚本)的常用命令和语句

一些常用的Shell编程(脚本)命令和语句,可以满足一般需求. 接收到的命令参数: 参数个数: $# 参数值: 命令本身:$0 第一个参数:$1 第二个参数:$2 -- 退出命令: exit echo命令: 换行: echo 输出后不换行: echo -n "请选择(y/n)?" 利用转义符号输出双引号: echo "欢迎使用\"正式服务器\"部署工具." 输出中带变量: echo "即将部署项目:$project_name"

Linux Shell 运维脚本功底积累

1.删除Linux远程用户连接会话 [[email protected] logs]# w 10:45:28 up 15 days, 16:23, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - Sun21 4days 0.00s 0.00s -bash root pts/0 192.168.1.2 09:11 0.00s 0.07s 0

Shell编程(脚本)的经常使用命令和语句

一些经常使用的Shell编程(脚本)命令和语句,能够满足一般需求. 接收到的命令參数: 參数个数: $# 參数值: 命令本身:$0 第一个參数:$1 第二个參数:$2 -- 退出命令: exit echo命令: 换行: echo 输出后不换行: echo -n "请选择(y/n)?" 输出后不换行,并把光标移到最左(以便下次输出覆盖当前行) echo -ne "$i\r" 利用转义符号输出双引號: echo "欢迎使用\"正式server\&qu

shell调用python脚本,并且向python脚本传递参数

1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2) ..... main(sys.argv[1], sys.argv[2]) 2.使用shell调用python中的函数: python脚本如下: test.py: import ConfigParser config = ConfigParser.Config

Java调用Shell命令和脚本,致力于hadoop/spark集群

前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.csdn.net/u010376788/article/details/51337312 http://blog.csdn.net/arkblue/article/details/7897396 第一种:普通做法 首先,编号写WordCount.scala程序. 然后,打成jar包,命名为WC.jar.

shell vs python脚本监控http请求

各写一个shell和python脚本来监控http请求,并在服务不可用的时候重启服务. 监控的连接为: http://192.168.1.101:5022/product http://192.168.1.101:5024/module shell脚本如下,配合crontab计划任务每一分钟执行一次检查: #!/bin/bash # This shell is used to moniter 192.168.1.101 port 5022 & 5024 date  #在crontab里用来记录l

Shell执行将脚本里的变量打印到指定日志文件

首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没日志了. 针对这种情况,可以在crontab里把任务执行的输出记录下来,后续出了问题可以到日志文件里获取任务的日志.可以参考:  abc -f xxx.sql >> /home/admin/logs/xxx.log 2>&1  待续...

Shell学习之: 脚本之间的调用

在Java,Python中,可以用import的方式来进行脚本或模块之间调用,例如: >>> import math >>> math.sqrt(4) 2.0 在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一:   . ./subscript.sh       方法二:   source ./subscript.sh 注意: 两个点之间,有空格,千万注意. 两个脚本不在同一目录,要用绝对路径 为简单起见,通常用第一种方法 例如: main