Shell编程学习笔记(2)

Shell编程学习笔记(2)

作者: Badcoffee

Email: blog.oliver@gmail.com
2004年11月

原文出处: http://blog.csdn.net/yayong
版权所有: 转载时请务必以超链接形式标明文章原始出处、作者信息及本声明


用shell实现一个命令或者工具的时候,对命令的参数进行合法性检查是很有必要的。
k shell是UNIX上最适合编程的shell,所以后面的例子都是ksh实现的。

例1:下面 的函数 实现了检查入口参数是否是大于0的整数:

check_numberic( )
{
    temstr=`echo $1|bc 2>/dev/null`

    if [ -z "$temstr" ] || [ $1 != $temstr ] || [ $1 -lt 0 ] || echo $temstr | grep "." >/dev/null 2>&1; then
        echo "$1 must be an positive interger/n"
        exit 1
    fi
}


这个函数利用了bc(1)命令对输入参数的返回值进行判断,比较简练。

通过例1,可以掌握ksh的下列语法:

1. 函数的语法:


    functionname( )
 {

     若干命令行

 }

 调用函数的格式为:

 functionname param1 param2……

 函数有自己的退出状态,因此函数可以作为if、while等控制结构的条件。

 与c语言不同的是,在函数定义时不用带参数说明。
     但在调用函数时可带有参数,此时shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。


2. if条件语句: <>

    if  条件命令串; then

        条件为真时的命令串

    else

        条件为假时的命令串

    fi


3.test测试命令

   详细的test命令的说明,可以man test得到。
   test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,下面简单说明一下:

    (1)数值测试:

  -eq:等于则为真

  -ne:不等于则为真

  -gt:大于则为真

  -ge:大于等于则为真

  -lt:小于则为真

  -le:小于等于则为真

    (2)字符串测试:

  =:等于则为真

  !=:不相等则为真

  -z字符串:字符串长度伪则为真

  -n字符串:字符串长度不伪则为真

    (3)文件测试:

  -e文件名:如果文件存在则为真

  -r文件名:如果文件存在且可读则为真

  -w文件名:如果文件存在且可写则为真

  -x文件名:如果文件存在且可执行则为真

  -s文件名:如果文件存在且至少有一个字符则为真

  -d文件名:如果文件存在且为目录则为真

  -f文件名:如果文件存在且为普通文件则为真

  -c文件名:如果文件存在且为字符型特殊文件则为真

  -b文件名:如果文件存在且为块特殊文件则为真


例2: 下面的函数 实现了检查入口参数是否为一个 合法的 串口 波特率

check_baud( )
{
        default_baud=`stty -a | grep speed | awk -F" " '{print $2}'`
        check_numberic $1
        stty $1
        if [ $? -ne 0 ]; then
                echo "$1 must be a baudrate/n"
                exit 1
        else
                stty $default_baud
        fi
}

首先,波特率必须是一个正整数,例2利用了例1的函数
check_numberic做了检查。
然后,利用stty 对输入参数是否为一个波特率值进行判断
比起先利用数组预置所有可能的波特率,再进行比较判断的方法,这种方法简洁了许多。


例2用到了shell的预定义变量 $?。

4. 预定义变量

    预定义变量和环境变量相类似,是在shell一开始时就定义了的变量。
    不同的是,用户只能使用这些变量而不能重定义。所有预定义变量都是由$符和另一个符号组成的:

    $#:位置参数的数量

    $*:所有位置参数的内容

    $?:命令执行后返回的状态

    $$:当前进程的进程号

    $!:后台运行的最后一个进程号

    $0:当前执行的进程名

    其中,“$?”用于检查上一个命令执行是否正确(在Unix/Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。

    “$$”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。

相关文档:Shell编程学习笔记(1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1. 什么是shell脚本? Shell脚本是一种编程语言,它是在Unix和Linux操作系统中使用的一种脚本语言。它可以帮助用户自动化任务,并且可以运行一系列命令。 Shell脚本通常以.sh扩展名结尾。 2. 为什么要学习shell脚本? 学习shell脚本可以帮助你自动化任务,提高工作效率。Shell脚本也可以帮助你编写小工具,方便你自己或其他人使用。Shell脚本还可以帮助你更好地理解Linux和Unix操作系统。 3. 如何编写一个简单的shell脚本? 首先,在命令行中输入命令nano test.sh,创建一个名为test.sh的文件。然后,在文件中输入以下内容: #!/bin/bash echo "Hello World" 接着,按下Ctrl + X,然后按下Y,最后按下Enter,保存并退出文件。接下来,您需要在命令行中输入以下命令: chmod +x test.sh ./test.sh 这将使test.sh文件可执行,并运行脚本。在命令行中,您应该看到输出“Hello World”。 4. shell脚本中的注释是什么? 注释是用于向脚本中添加说明和文档的文本。在Shell脚本中,注释以“#”开头。注释不会被脚本解释器执行,但可以帮助其他人更好地理解脚本。 5. 如何在shell脚本中使用变量? 变量是一个用于存储值的占位符。在Shell脚本中,您可以使用以下语法来定义变量: my_variable="Hello World" 您可以使用echo命令来输出变量的值: echo $my_variable 6. 如何在shell脚本中使用条件语句? 在Shell脚本中,您可以使用条件语句来执行基于条件的操作。以下是一个示例条件语句: if [ $my_variable = "Hello World" ] then echo "The variable contains Hello World" else echo "The variable does not contain Hello World" fi 7. 如何在shell脚本中使用循环? 在Shell脚本中,您可以使用for循环或while循环来执行重复的操作。以下是一个示例for循环: for i in 1 2 3 4 5 do echo $i done 以上代码将输出数字1到5。 8. 如何在shell脚本中使用函数? 在Shell脚本中,您可以使用函数来组织和重复使用代码。以下是一个示例函数: function say_hello { echo "Hello World" } 您可以通过以下方式调用函数: say_hello 9. 如何从shell脚本中读取用户输入? 在Shell脚本中,您可以使用read命令来从用户那里读取输入。以下是一个示例: echo "What is your name?" read name echo "Hello $name" 以上代码将提示用户输入他们的名字,并输出“Hello”后跟用户的名字。 10. 如何在shell脚本中使用命令行参数? 在Shell脚本中,您可以使用$1、$2、$3等变量来访问命令行参数。例如,以下是一个示例脚本,它接受两个命令行参数并将它们相加: #!/bin/bash sum=$(($1 + $2)) echo "The sum of $1 and $2 is $sum" 您可以使用以下命令来运行脚本并传递两个参数: ./test.sh 2 3 以上代码将输出“The sum of 2 and 3 is 5”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值