Linux shell杂项

Linux shell程序设计杂项
    好了,今天是shell变成学习的最后一篇,介绍一下其它的一些相关知识,对于初学者来说,这些只是应该是最迫切需要掌握的,因为一些if、for的语句可以慢慢领悟,但如果不了解这些边边角角的内容,别人写的例子就看不懂,严重打击自信心。所以今天的这一篇是非常重要滴。
一、算术运算
    bash中的算术运算符命令为let,其语法为:
    let arg ...
    其中:arg是单独的算术表达式,基本用法与C语言相同。但不能使用“++”、“--”、“,”;但提供了“**”做方幂运算。
    let命令可以用(())代替
    例如:
    let "j=i*6+2" 和 ((j=i*6+2)) 等价
    let返回结果非0,则返回状态值为0,否则返回状态值为1。
    注:若有特殊字符,必须有双引号括起来,比如 let "val=a|b",若不用引号则会认为|是管道符。
二、函数
    函数定义的格式为:
    [function]函数名()
    {
      命令表
    }
    其中function关键字可以默认不写, 调用函数时直接使用函数名,不用带(),就像使用一般的命令一样。
    举例:
    $ cat ex17
      #func is a function name
      #it echo the values of variables and arguments
      func()
      {
        echo "Let's begin now."
        echo $a $b $c
        echo $1 $2 $3
        echo "The end."
      }
      a="Working directory"
      b="is"
      c=`pwd`
      func Welcome You Byby
      echo "Today is `date`"
    $ ./ex17
      Let's begin now.
      Working directory is /home/wangxiaoqi
      Welcome You Byby
      The end.
      Today is .....
    另注:可以直接使用return命令退出函数。后面可带参数指定退出值。
三、作业控制
    在命令行最后加一个“&”就可以使该命令成为后台作业。
    如果set命令的monitor选项被打开,即执行了 set -o monitor 命令,则shell进入作业管理。
1、jobs命令
    不带参数的jobs命令可以列出当前尚未完成的作业。例如:
    $ jobs
      [2] +Done               who| wc -cd
      [1] -Stopped(SIGTTOU)   man ls&
    说明:[]中的整数代表作业号,后面的“+”代表当前作业,“-”代表前一个作业。在“+-”后面列出作业状态,最后则是作业的内容。
2、kill命令
    kill命令可以向指定进程发送终止信号,例如:15表示使作业正常中止运行;9表示立即终止进程。
    kill -9 1893
    表示终止PID为1893进程的运行。
    注:利用 kill -l 可以列出全部的信号名
3、bg和fg命令
    bg用于把前台作业切换到后台,fg则相反。
    $ bg(fg) %1
    表示将作业1切换的后台(前台)
    注:如果不带参数,表示切换当前job
四、shell内置命令
1、eval命令
    该命令可以将一个字符串当作命令行来执行,例如:
    $ a="id | cut -f1 -d' '"
    $ eval $a
      uid=0(root)
    说明:不用eval命令,那么在执行时就会将“| cut -f1 -d”都作为了id命令的参数。时候eval后,它会把第一遍命令行处理所得的"id", "|", "cut", "-f1", "-d"这些字符串再次进行命令行处理,这次就能正确分析其中的管道了。
2、exec命令
    格式: exec [ arg ... ]
    作用:在本shell中执行由参数arg指定的命令,不创建新进程。
    注意:arg中允许有输入/输出重定向。
3、hash命令
    格式: hash [ -r ] [ name ... ]
    作用:记住name指定的每个命令在搜索路径中的位置,[-r]则正好相反。
    注意:如果没有参数,则列出所有已记忆的命令信息
4、readonly命令
    格式:readonly [ name ... ]
    作用:将name变量标记为只读
    注意:若没有参数,则列出所有只读变量的清单
5、trap命令
    格式:trap [ arg ] [ n ] ...
    作用:当收到后面的[n]信号时,执行arg
6、type命令
    格式:type [ name ... ]
    作用:对于每个name,如果作为命令名,是如何被解释的
7、unset命令
    格式:unset [ name ... ]
    作用:删除name的相应变量或函数
    注意:PATH、PS1、PS2、MAILCHECK、IFS不能被删除
8、umask命令
    格式:umask [-S][mask]
    作用:将用户文件创建掩码设置为mask的值
    注意:若mask为八进制数,则对应位被置上;若mask为符号,则用来设置权限;若无mask,则显示当前掩码;-S以符号形式显示有关信息(rwx等权限)
9、wait命令
    格式:wait [n]
    作用:等待由n(进程ID)指定的进程终止,并报告终止状态
    注意:若无参数,则等待所有进程终止。改参数返回值永远为0
五、脚本调试
1、解决环境设置问题
    ① 无法在其他环境下执行bash脚本。
    在shell脚本第一行加上 #!/bin/bash
    ② PATH环境变量没有包括“.”,无法识别当前目录
    PATH=$PATH:.
    ③ 脚本文件与已存在命令名字相同
    修改脚本名
2、解决脚本错误
    调试shell脚本的方法是打开set命令的-x选项,或者在启动shell时使用-x选项,则shell进入跟踪模式。
    另一种方法是多使用echo和print命令,这样可以根据显示来判断程序错误发生在哪一步。
    注:尽量改一次错误执行一次,以判断确切的错误发生地。
 
此文转载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值