`
tomotoboy
  • 浏览: 166812 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

向脚本传递参数

阅读更多
shift命令
向脚本传递参数时,有时需要将每一个参数偏移以处理选项,这就是 shift命令的功能。它每次将参数位置向左偏移一位,下面用一段简单脚本详述其功能。脚本使用 while循环反馈所有传递到脚本的参数。使用shift命令来处理传递到脚本的每一个参数:
#!/bin/sh
loop=0
while [ $# -ne 0 ]
do 
   echo $1
   shift
done

使用shift处理文件大小写转换
!#/bin/sh
# tr_case
# convert files to either  upper or lower case
FILES=""
TRCASE=""
EXT=""
OPT=no

# gets called when a conversion fails
error_msg()
{
_FILENAME=$1
echo "`basename $0`: Error the conversion failed on $_FILENAME"
}

if [ $# -eq 0 ]
then 
   echo "For more info try `basename $0` --help"
   exit 1
fi

while [ $# -gt 0 ]
do
  case $1 in
  #set the variables based on what option was used
  -u)TRCASE=upper
     EXT=".UC"
     OPT=yes
     shift
     ;;
  -l)TRCASE=lower
     EXT=".LC"
     OPT=yes
     shift
     ;;
  -help) echo "convert a file(s) to uppercase from lowercase"
         echo "convert a file(s) from lowercase to uppercase"
         echo "will convert all characters according to the sepcified command option."
         echo "where option is"
         echo "-l Convert to lowercase"
         echo "-u Convert to uppercase"
         echo "The original file(s) is not touched. A new file(s)"
         echo "will be created with either a .UC or .LC extension"
         echo "usage: $0 -[l|u] file [file..]"
     exit 0
     ;;
    -*) echo "usage: `basename $0` -[l|u] file [file..]"
     exit 1
     ;;

     *) # collect the files to process
     if [ -f $1 ]
       then
           # add the filenames to a variable list
           FILES=$FILES" "$1
       else
           echo "`basename $0` : Error cannot find the file $1"
     fi
     shift
     ;;
   esac
done

if [ "$OPT" = "no" ]
then
   echo "`basename $0`: Error you need to specify an option. No action taken"
   echo "`basename` --help"
   exit 1
fi
          
# now read in all the file(s)
# use the variable LOOP, I just love the word LOOP
for LOOP in $FILES
do
 case $TRCASE in
 lower) cat $LOOP|tr "[a-z]" "[A-Z]" >$LOOP$EXT
    if [ $? != 0 ]
       then 
       error_msg $LOOP
    else
       echo "Converted file called $LOOP$EXT"
    fi
    ;;
 upper) cat $LOOP|tr "[A-Z]" "[a-z]" > $LOOP$EXT
    if [ $? != 0 ]
    then
       error_msg $LOOP
    else
       echo "Converted file called $LOOP$EXT"
    fi
    ;;
  esac
done

getopts命令
#!/bin/sh
#getopts1
#set the vars
ALL=false
HELP=false
FILE=false
VERBROSE=false

while getopts ahfgv OPTION
do
  case $OPTION in
  a)ALL=true
    echo "ALL is $ALL"
    ;;
  h)HELP=true
    echo "HELP is $HELP"
    ;;
  f)FILE=true
    echo "FILE is $FILE"
    ;;
  v)VERBOSE=true
    echo "VERROSE is $VERROSE"
    ;;
  esac
done

/home/l/g/tomotoboy/getopts >getopts1 -a
ALL is true
/home/l/g/tomotoboy/getopts >getopts1 -v
VERROSE is
/home/l/g/tomotoboy/getopts >getopts1 -v -a -h
VERROSE is
ALL is true
HELP is true
getopts一般格式为:
getopts  option_string variable
在上述例子中使用脚本:
while getopts ahfgv OPTION
可以看出while循环用于读取命令行,option_string为指定的5个选项(- a,- h,- f,- g,- v),脚本中variable为OPTION。注意这里并没有用连字符指定每一单个选项。

使用getopts指定变量取值
有时有必要在脚本中指定命令行选项取值。getopts为此提供了一种方式,即在option_string中将一个冒号放在选项后。例如:
getopts ahfvc: OPTION
上面一行脚本指出,选项 a、h、f、v可以不加实际值进行传递,而选项 c必须取值。使用选项取值时,必须使用变量 OPTARG保存该值。如果试图不取值传递此选项,会返回一个错误信息。错误信息提示并不明确,因此可以用自己的反馈信息屏蔽它,方法如下:
将冒号放在option_string开始部分。
while getopts :ahfgvc:  OPTION
#!/bin/sh
#getopts1
#set the vars
ALL=false
HELP=false
FILE=false
VERBROSE=false
COPIES=0 #the value for the -c option is set to zero
while getopts :ahfgvc: OPTION
do
  case $OPTION in
  a)ALL=true
    echo "ALL is $ALL"
    ;;
  h)HELP=true
    echo "HELP is $HELP"
    ;;
  f)FILE=true
    echo "FILE is $FILE"
    ;;
  v)VERBOSE=true
    echo "VERROSE is $VERROSE"
    ;;
  c)COPIES=$OPTARG
    echo "COPIES is $COPIES"
    ;;
  \?) #usage stagement
    echo "`basename $0` -[a h f v] -[c value] file" >&2
    ;;
 esac
done  


/home/l/g/tomotoboy/getopts >chmod 755 getopts2
/home/l/g/tomotoboy/getopts >getopts2 -c hello
COPIES is hello
/home/l/g/tomotoboy/getopts >getopts2 -h -c hello
HELP is true
COPIES is hello


访问取值方式
getopts的一种功能是运行后台脚本。这样可以使用户加入选项,指定不同的磁带设备以备份数据。使用getopts实现此任务的基本框架如下:
#!/bin/sh
QUITE=n
DEVICE=awa
LOGFILE=/tmp/logbackup
usage()
{
 echo "Usage: `basename $0` -d [device] -l [logfile] -q"
 exit 1

}
if [ $# = 0 ]
then 
  usage
fi

while getopts :qd:l: OPTION
do
  case $OPTION in
  q) QUIET=y
     LOGFILE="/tmp/backup.log"
     ;;
  d) DEVICE=$OPTARG
     ;;
  l) LOGFILE=$OPTARG   
     ;;
  \?)usage
     ;;
   esac
done
echo "you chose the following options...I can now process these"
echo "Quite = $QUIET $DEVICE $LOGFILE"




分享到:
评论

相关推荐

    向python脚本传递参数(例子)

    ### 向Python脚本传递参数知识点详解 在Python编程中,能够从命令行接收参数是一项非常实用的功能。本文将深入探讨如何使用`sys.argv`来接收命令行参数,并通过一个具体的示例——过滤文本文件中的特定关键字——来...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    向shell或者sql脚本传参或接收参数的方法

    这篇文章将详细讲解如何向Shell或SQL脚本传递参数以及如何在脚本中接收这些参数。 首先,让我们来看向Shell脚本传递参数的方法。在命令行中,你可以像这样执行一个Shell脚本,并传递参数: ```bash sh a.sh aaa ...

    Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三个参数,并分别...

    实现bat脚本封装接口,可以自动判断是否需要向下传参

    在`start.bat`中,可以设定条件判断,决定是否需要向被调用的子脚本传递参数。 **二、bat脚本的包管理** 1. **包管理**:在软件开发中,包管理器用于安装、升级和管理依赖项。在BAT脚本中,我们可以创建类似的机制...

    shell脚本传参、嵌入式命令

    本文将详细讲解如何向shell脚本传递参数、如何在脚本中嵌入命令,以及如何调试shell脚本,特别是通过`set`命令传递参数的方法。 一、向脚本传递参数 在shell脚本中,参数是以位置参数的形式传递的,从$0到$9表示前...

    java 直接调用python脚本,并传递参数代码实例

    Java 调用 Python 脚本传递参数是指在 Java 应用程序中调用 Python 脚本,并将参数传递给 Python 脚本,以实现特定的功能。在本篇文章中,我们将详细介绍 Java 调用 Python 脚本传递参数的方法,并提供示例代码,...

    shell编程指南全套2

    **20向脚本传递参数.pdf** 学习如何通过命令行参数向Shell脚本传递数据。了解$0, $1, $2等特殊变量的含义,以及如何使用`shift`命令处理多个参数。 3. **21创建屏幕输出.pdf** 这部分讲解了如何使用`echo`, `printf...

    shell脚本详解

    第20章_向脚本传递参数; 第21章_创建屏幕输出; 第22章_创建屏幕输入; 第23章_调试脚本; 第24章_shell嵌入命令; 第25章_深入讨论; 第26章_shell工具; 第27章_几个脚本例子; 第28章_运行级别脚本;

    Shell脚本通过参数名传递参数的实现代码

    为了解决这个问题,我们可以使用参数名来传递参数,这使得脚本更具可读性和可维护性。在Shell中,我们可以借助`getopts`命令来实现这一功能。 `getopts`是Bash shell内置的一个命令,用于处理命令行选项。它允许...

    LINUX与UNIX_SHELL编程指南(2).rar

    第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入命令 277 第25章 深入讨论 第26章 shell 工具 289 第27章 几个脚本例子 306 第28章 运行级别脚本...

    java调用shell(包含有参数的调用)

    本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本可以被看作是一系列Linux命令的集合,用于自动化执行多个命令。类似于Windows环境中的批处理文件,Shell脚本...

    Linux shell脚本 精华中文版

    020_向脚本传递参数_shift_getops.pdf 021_创建屏幕输出_tput.pdf 022_创建屏幕输入.pdf 023_测试脚本.pdf 024_shell嵌入命令.pdf 025_快速创建文件_自动菜单_ftp传输_连接至其他应用系统.pdf 026_创建以日期...

    bat脚本参数传递,实现java -jar apktool.jar -version可以使用apktool -version代替

    bat脚本参数传递,实现java -jar apktool.jar -version可以使用apktool -version代替

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第20章 向脚本传递参数 224 第21章 创建屏幕输出 236 第22章 创建屏幕输入 252 第23章 调试脚本 274 第24章 shell嵌入命令 277 第五部分 高级shell编程技巧 第25章 深入讨论 第26章 shell 工具 289 第27章 几个脚本...

    java 远程调用Shell脚本客户端包

    4. **输入/输出流处理**:为了获取Shell脚本的输出或者向脚本传递参数,需要正确地处理输入和输出流。Java的`InputStream`和`OutputStream`类可以用来读取和写入数据,从而与远程进程进行交互。 5. **错误处理**:...

    Unix shell 基础知识普及

    20. 向脚本传递参数 21. 创建屏幕输出 22. 创建屏幕输入 23. 调试脚本 24. SHELL 嵌入命令 25. 深入讨论 26. SHELL 工具 27. 几个脚本例子 28. 运行级别脚本 29. CGI 脚本 30. 常用 SHELL 命令

    Shell脚本传递参数的3种方法比较

    本文将详细讲解三种不同的方法来传递和解析Shell脚本参数,并通过具体的代码示例进行说明。 首先,最基本的参数传递方式是直接通过位置参数($1, $2, ..., $n)来获取。在脚本中,这些变量代表了运行脚本时在命令行中...

Global site tag (gtag.js) - Google Analytics