shell编程基础(3.常用概念命令与操作

5 篇文章 0 订阅

 

5信号处理

信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生。这些事件通常是内存错误,访问权限问题或某个用户试图停止你的进程。信号实际上是一些数字。下表列出了最常用的信号及它们的含义列出所有信号:

>kill l

HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM USR1

USR2 CLD PWR VTALRM PROF IO WINCH STOP TSTP CONT TTIN TTOU

 

一些信号的含义:

1 SIGHUP    挂起或父进程被杀死

2 SIGINT    来自键盘的中断信号,通常是< C T R L - C >

3 SIGQUIT   从键盘退出

9 SIGKILL   无条件终止

11 SIGSEGV 段(内存)冲突

15 SIGTERM 软件终止(缺省杀进程信号)

 

5.1 发出信号:

kill 信号  进程号

注明:kill 9 进程号  杀死进程时,操作系统直接将进程从内核清除,不作退出的处理

 

5.2 检测信号或者捕捉信号

有些信号可以被应用程序或脚本捕获,并依据该信号采取相应的行动。另外一些信号不

能被捕获。例如,如果一个命令收到了信号9,就无法再捕捉其他信号。

当脚本捕捉到一个信号后,它可能会采取下面三种操作之一:

1) 不采取任何行动,由系统来进行处理。

2) 捕获该信号,但忽略它。

3) 捕获该信号,并采取相应的行动

 

如果需要捕捉信号后,采用自定义的操作,可以使用trap命令:

trap name signal(s)

其中,name是捕捉到信号以后所采取的一系列操作。实际生活中, name一般是一个专门用来处理所捕捉信号的函数。Name需要用双引号(“ ”)引起来。Signal就是待捕捉的信号。

下表列出了一些最常见的trap命令用法:

trap "" 2 3             忽略信号2和信号3,用户不能终止该脚本

trap"commands" 2 3 如果捕捉到信号2或3,就执行相应的commands命令

trap 2 3            复位信号2和3,用户可以终止该脚本

 

如:收到3( SIGQUIT 从键盘退出),打印一行“proc received SIGQUIT and exit

#!/bin/ksh

 

trap fun_exit 3

 

fun_exit()

{

   echo proc received SIGQUIT and exit

   exit 1

}

 

echo start running

 

exit 0

 

6 eval命令

eval命名可以执行之后跟随的命令或者变量所赋的值或者表达式。比如:

用法1:

eval echo aaa

用法2:

command=env

eval $env

command=echo aaa

eval $command

用法3:

value=0

eval [ $? -gt $value ]&&j=1

eval [ $? -gt $value ]&& echo successfully

eval var=$#

eval命令在执行程序运行过程中赋值命令的变量非常有用。比如在SHELL编制的人机交互界面中,选中某个菜单项后执行没个命令或者函数,脚本本身不可能为每个菜单项case一遍。

 

【4】其他

4.1 使用不同的壳执行命令文件

1) 如果Script的第一个非空白字元不是"#",则它会使用Bourne Shell。

2) 如果Script的第一个非空白字元是"#"时,但不以"#!"开头时,则它会使用C Shell。

3)如果Script以"#!"开头,则"#!"後面所写的就是所使用的Shell,而且要将整个路径名称指出来,这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。Bourne Shell的路径名称为/bin/sh ,而C Shell 则为/bin/csh。我们一般使用ksh, 路径为/bin/ksh

 

4.2 使用不同SHELL的区别

  BSH:

      设置环境变量使用export var=var_value; var=var_valu; export var

  CSH/KSH:

      设置环境变量使用setenv var var_value

 

一些KSH独有的特征:

1)KSH环境变量

HISTSIZE:历史命令数量,默认为128,可以在.chsrc中将其设置为其他值

TMOUT   :超时自动退出,用于一段时间没有键入命令,强制退出   

1)  别名

可以定义自己的标识,标识定义的命令。比如:

alias dba dbaccess $TELLIN_DBNAME

2)  支持数组变量

 

4.3 SHELL程序的返回值不能超出255,否则返回值将不确定

 

4.4  read命令将输入的多余的part给最后一个变量

>read var1 var2

aa bb cc

>echo $var1

aa

>echo $var2

bb cc

 

4.5 调试

使用-x

1) 在SHELL程序指定执行为调试模式

#!/bin/sh x

 

2) 在命令行中指定调试模式执行

指定SHELL x 程序名称,如:

sh x update_iuser214.sh

 

4.6 执行SHELL

前台执行:

>sh 程序名称

>程序名称

后台执行:

>sh 程序名称  &

>程序名称     &

 

4.7 移植性

目前智能业务部的设备选型中,小型机从IBM/HP/SUN 3家中选择。相应我们的SHELL一般需要在AIX,HP-UX,SunOS上应当保持一致。即SHELL程序一般需要在3中操作系统上进行移植。

可以使用uname s确定机器的操作系统,比如:

#机器类型

OsType=`uname -s`

if [ "-$OsType" = "-SunOS" ]; then

   

elif [ "-$OsType" = "-HP-UX" ]; then

   

elif [ "-$OsType" = "-AIX" ]; then

   

else

   echo "ERROR: system not support this machine type $OsType"

   eixt 1

fi

 

大部分常见的UNIX命令在以上3中操作是一致的,但是某些命令则具有差异(如ftp的ls在HP-UX为nlist)。如果碰到与操作系统相关的地方,则需要根据操作系统作相应处理。

 

 

附录:

一个SHELL编制的人机交互界面,里面使用的SHELL语法比较深入。如果能读懂或者编制同样程序,则表明你的SHELL教本功底已经足够深厚。如果不能读懂,可以挑战一下自己。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值