shell编程中的输入参数处理

来源:互联网 发布:linux 改文件夹名字 编辑:程序博客网 时间:2024/06/15 05:39

shell编程中的输入参数处理

首先来了解一些shell脚本中的特殊参数:
$IFS 输入域分隔符。当shell读取输入时,它给出用来分隔单词的一组字符,它们通常是空格、制表符和换行符。
$# 传递到脚本的参数个数
$* 在一个变量中列出所有的参数,各个参数之间用环境变量IFS中的第一个字符分隔开。如果IFS为空,所有参数将会挤在一块如一个字符串的形式。如果IFS被修改了,那么$*将命令行分隔为参数的方式就将随之改变。
$$ 脚本运行的当前进程I D号
$! 后台运行的最后一个进程的进程I D号
$@ 是$*的一种变体,它不使用IFS环境变量,所以即使IFS为空,参数也不会挤在一起。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
简单的写一个脚本来查看一下几个参数的表现:
#! /bin/bash

echo \$\#: $#
echo \$\*: $*
echo \$\$: $$
echo \$\!: $!
echo \$\@: $@
echo \$\?: $?
然后执行以下这个脚本,执行时传入几个参数:
[root@LovelyLP shell]# ./arg.sh a b c d e
$#: 5
$*: a b c d e
$$: 1591
$!:
$@: a b c d e
$?: 0
通过输出结果,可以对这些特殊参数有一个直观的认识。
 
在此基础上,我们可以编写一些shell脚本或function来简化平时的工作
例如有这样一条命令:
rhc app create -a php1 -t php-5.3 -s -n --no-dns -p password
其中-a后面的参数可能会改变,-s,-n --no-dns选项可能会根据需要决定是否使用,我们可以优化一下命令,编写到.bashrc中,以后通过调用function的方式来使用,提高工作效率:
 
function cphp_app()
{
    cmd="rhc app create -p $OPENSHIFT_PASSWD -t php-5.3 -a" # User's command string
    if [ $# -eq 0 ]; then
        cmd=${cmd}" php1"         # specify a default name if no params are provided
    else
        for i in $@
        do
            if [ ${i} == "-n" ]; then
                cmd=${cmd}" -n --no-dns" # make -n short for -n --no -dns
            else
                cmd=${cmd}" ${i}"
            fi
        done
    fi

    # execute command
    eval `echo ${cmd}`
}
 
把这样的程序写在~/.bashrc中,source一下后,就能够方便的调用了
总结起来,之所以编写shell脚本,无非是为了提高工作效率,使用perl,ruby等编程语言对于处理这类问题更加出色。
原创粉丝点击