getopts:用于描述相关信息。

  选项: OPTARG  、  OPTIND


bash脚本综合实验:

1、如何利用脚本,在创建脚本时,自动把相关选项添加到新的脚本中,且自动在保存

脚本后检测是否有语法错误,选择是否继续编辑还是退出等操作且描述信息可以自己定义。


 vim mkscript.sh

#!/bin/bash

# Name: mkscript   脚本名称

# Description: Create script   脚本描述

# Author: A dong    作者

# Version:0.0.1    版本号

# Datatime: 04/06/17 14:50:00

# Usage:mkscript FILENAME

while getopts ":d:" OPT; do

  case $OPT in

   d)

    DESC=$OPTARG ;;

   \?)

    echo "Usage: mkscript [ -d DESCRIPTION ] FILENAME" ;;

  esac

done


shift $[OPTIND-1]


if ! grep "[^[:space:]]" $1 &> /dev/null ; then

 cat > $1 << EOF

#!/bin/bash

# Name: `basename $1`  

# Description: $DESC   

# Author: A dong   

# Version:0.0.1    

# Datatime: `date "+%F %T"`

# Usage:`basename $1`


EOF

fi


vim + $1


until bash -n $1 &> /dev/null ;do

   read -p "Syntax error,q|Q for quiting,others for editing: " CHOESE

  case $CHOESE in 

   q|Q)

     echo "Quiting..."

     exit 8

     ;;

    *)

     vim + $1

     ;;

 esac

done


chmod +x $1


脚本执行结果如下:自动生成相关的描述信息

[root@john script]# bash mkscript.sh -d "opt test" optest.sh

#!/bin/bash

# Name: optest.sh  

# Description: opt test 

# Author: A dong  

# Version:0.0.1    

# Datatime: 2017-04-07 09:42:59

# Usage:optest.sh

 


 

2.写一个脚本getinterface.sh,脚本可以接受选项(i,I,a),完成以下任务:

 (1)使用以下形式:getinterface.sh [-i interface|-I IP|-a]

 (2)当用户使用-i选项时,显示其指定网卡的IP地址; 

 (3)当用户使用-I选项时,显示其后面的IP地址所属的网络接口;

 (4)当用户单独使用-a选项时,显示所有网络接口及其IP地址(lo除外);


vim showip.sh


#!/bin/bash

# Name: getopts.sh  

# Description: getopts OPTIND   

# Author: A dong   

# Version:0.0.1    

# Datatime: 2017-04-07 15:00:38

# Usage:getopts.sh

 SHOWIP () {

   if ! ifconfig |grep -o "^[^[:space:]]\{1,\}"|grep $1 &>/dev/null ;then

     return 13

   fi

     echo -n "$1: "

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

  

  }

  

 SHOWETHER () {

   if ! ifconfig |grep -o "[0-9\.]\{1,\}"|cut -d: -f2 |grep $1 &> /dev/null ;then

       return 14

   fi 

     echo -n "$1: "

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

  }

  

   USAGE () {

     echo "getopts.sh <-i interface|-I IP|-a ALL>"

  }

  

 while getopts ":i:I:a:" SWITCH; do

   case $SWITCH in

     i)

      SHOWIP $OPTARG

      [ $? -eq 13 ] && echo "Wrong ethercard."

      ;;

     I)

      SHOWETHER $OPTARG

     [ $? -eq 14 ] && echo "Wrong IP."

      ;;

     a)

      ifconfig | grep -A 1 "^[^[:space:]]\{1,\}"|grep -A 1 "eth[[:alnum:]]"

      ;;

     *)

       USAGE ;;

    esac

  done