linux命令:shell脚本编程知识点 信号捕捉trap mktemp ${#}

简介:

脚本编程知识点:


* FILE=/usr/local/src

TEST=${FILE#*/}:$TEST结果为usr/local/src, 以/为关键字,删除从左边数第一个/及关键字/左边的所有字符串。 

DEST=${FILE##*/}:$DEST结果为src,以/为关键字,删除最后一个关键字/及关键字/左边的所有字符串。 从左往右时,*号需在关键字左边


DOTEST=${FILE%/*}:$DOTEST结果为/usr/local,以/为关键字,删除从右边数第一个/及关键字/右边的所有字符串。

DODEST=${FILE%%/*}:$DODEST结果为空,以/为关键字,删除从右边数最后一个/及关键字/右边的所有字符串。 从右往左时,*号需在关键字右边



1、如何获取变量中字符的长度:

 ${#VARNAME}    VARNAME变量名

 Usage: 

[root@localhost ~]# VARNAME1='TESTING SERVER'

[root@localhost ~]# echo "${#VARNAME1}"

14                统计变量VARNAME1的字符长度,空格也占字符长度


2、变量赋值等:

设定变量名为p

${p:-word}:如果p为空或未定义,则变量展开为"word",但p本身值不变,否则,展开为p本身的值

${p:+word}:如果p为空或未定义,则变量的值为p本身的值;否则,变量的值为"word",但p本身的值不变

${p:=word}:如果p为空或未定义,则变量的值为"word";并将word赋值给p

A=${parte:num}:A的值为parte往右偏移num个后剩余的所有字符

A=${parte:num1:length}:A的值为parte往右偏移num1个后的length长的字符串

Usage: 

[root@localhost ~]# A='hello world'

[root@localhost ~]# echo "${A:2:3}"

llo

[root@localhost ~]# echo "${A:2}"

llo world

[root@localhost ~]# echo "${A:3:5}"

lo wo


Usage:

[root@localhost ~]# A=3     先给A赋值为3

[root@localhost ~]# echo ${A:-30}  因为A的值为3,所以不为空

3                       ${A:-30}的值为本身3

[root@localhost ~]# unset A     取消A的赋值后A的值为空

[root@localhost ~]# echo ${A:-30}  因为A的值为空 

30                      ${A:-30}的值为30

[root@localhost ~]# echo $A      但是此时A的值仍为空


[root@localhost ~]# A=${A:-30}

[root@localhost ~]# echo $A

30


3、脚本配置文件:

 /etc/rc.d/init.d/服务脚本

 服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件


4、局部变量:在变量名前面加local

local VAR_NAME=     该变量的作用域只是局部范围。


5、命令mktemp:创建临时文件或目录

 mktemp /tmp/file.XX  随机创建文件名为file.XX的临时文件,不重名xx为随机不重名的2个字符

    -d:创建临时目录

[root@localhost ~]# mktemp /tmp/file.XX

/tmp/file.49

[root@localhost ~]# mktemp /tmp/file.XXXX

/tmp/file.5453

[root@localhost ~]# mktemp /tmp/file.XXXX

/tmp/file.5454

[root@localhost ~]# mktemp /tmp/file.XXXXXXXXX

/tmp/file.VHPK15455

[root@localhost ~]# mktemp /tmp/file.XXXXXXXXX

/tmp/file.GOHB15456

[root@localhost ~]# mktemp -d /tmp/file.XX  创建临时目录

/tmp/file.59

[root@localhost ~]# ls /tmp

busybox   file.49  file.51  file.5453  file.59         file.VHPK15455

busybox2  file.50  file.52  file.5454  file.GOHB15456  


6、信号捕捉:trap命令

 常见的信号: kill -SIGNAL PID  

  1:SIGHUP;让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效。

  2:SIGINT;相当于ctrl+c,中止一个前台进程

  9:SIGKILL;杀死一个进程,强制的把进程终止。

  15:SIGTERM;安全的终止一个进程,可以留给用户操作时间,比如保存正在修改的文件后再终止

  18:SIGCONT;把前台进程放入后台继续执行,相当于bg

  19:SIGSTOP;把前台进程放至后台并停止执行,相当于ctrl+z

trap命令:信号捕捉命令  SIGKILL和SIGTERM信号无法捕捉

trap 'COMMAND' 信号列表  trap 'echo "you go"' SIGINT

[root@localhost ~]# vim showdate.sh

#!/bin/bash

#

trap 'echo "you go"' SIGINT  #捕捉到SIGINT信号后执行echo命令


 while :; do

   date

   sleep 2

 done


[root@localhost ~]# ./showdate.sh 

2016年 12月 17日 星期六 07:23:24 CST

2016年 12月 17日 星期六 07:23:26 CST

2016年 12月 17日 星期六 07:23:28 CST

you go    按ctrl+c也就是SIGINT信号,就执行echo命令

2016年 12月 17日 星期六 07:23:28 CST

2016年 12月 17日 星期六 07:23:30 CST

you go

2016年 12月 17日 星期六 07:23:31 CST

you go

2016年 12月 17日 星期六 07:23:32 CST


7、一行中执行多个语句,语句间用分号分隔

Usage:  echo "continue" ; exit 1   输出continue后并退出。


8、如何获取屏幕显示大小所占多少行及每行字符总长度

 stty -F /dev/console size

[root@localhost ~]# stty -F /dev/console size

25 80               25表示行数,80表示每行字符总长度

[root@localhost ~]# A=`stty -F /dev/console size`

[root@localhost ~]# echo ${A#* }  以空格为关键字,删除第一个空格及其左边的字符

80


. /etc/sysconfig/network-scripts/ifcfg-eth0 把ifcfg-eth0文件中的内容导入到当前文档中


Usage:

[root@test init.d]# vim /mnt/sysroot/etc/rc.d/init.d/network 

#!/bin/bash
#
# chkconfig:35 09 90
# description: network service
prog=network
. /etc/rc.d/init.d/functions    把/etc/rc.d/init/d/functions文本中的内容添加至该文档中。
CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
. $CONF
NETMASK=22
 
start() {
  ifconfig eth0 $IPADDR/$NETMASK up
  [ -z $GATEWAY ] && route add default gw $GATEWAY
  return 0
}
stop() {
  ifconfig eth0 down
}
status() {
  ifconfig eth0
}
usage() {
  echo "$prog: {start|stop|restart|status|"
}
case $1 in
start)

  start
  success "Config network eth0." ;;
stop)
  stop
  success "Stop network card eth0." ;;
restart)
  stop
  start
  success "Restart network card eth0" ;;
status)
  status ;;
*)
  usage
  exit 1 ;;
esac







本文转自wang650108151CTO博客,原文链接: http://blog.51cto.com/woyaoxuelinux/1882485  ,如需转载请自行联系原作者






相关文章
|
8天前
|
存储 Shell 分布式数据库
Hbase 的基本shell 命令
Hbase 的基本shell 命令
|
10天前
|
Shell Linux C语言
|
22天前
|
Shell Linux
Linux Shell 脚本入门教程:开启你的自动化之旅
Shell是一种计算机程序,它充当了用户与操作系统之间的接口。在Linux系统中,Shell允许用户通过命令行界面(CLI)来控制计算机。Shell脚本则是一种使用Shell语言编写的脚本,它可以自动执行一系列的命令,帮助用户实现任务自动化,提高工作效率。
|
9天前
|
敏捷开发 Shell 测试技术
阿里云云效产品使用合集之如何用私有构建机运行shell命令打出的镜像作为下一个阶段的入参
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
存储 Shell 数据安全/隐私保护
Shell 内建命令:Shell 的内在魔力
Shell 内建命令比外部命令执行快,不需额外进程。`type` 命令用来检查命令类型。内建命令如 `cd`、`alias` 和 `echo` 直接在 Shell 中执行,不涉及磁盘 I/O。`type` 示例展示了 `cd` 是内建的,`ifconfig` 是外部的。`bash` 包含多种内建命令,如 `cd` 用于切换目录,`alias` 定义别名,`read` 从输入读取数据。`echo` 默认加换行,`echo -n` 可避免。
26 5
|
1月前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
27 1
|
24天前
|
监控 Linux
Linux脚本之监控系统内存使用情况并给予警告
Linux脚本之监控系统内存使用情况并给予警告
|
24天前
|
缓存 网络协议 Linux
Linux、Python、计算机网络中的常见知识点
Linux、Python、计算机网络中的常见知识点
|
24天前
|
缓存 网络协议 Linux
Linux下脚本编写局域网扫描工具
Linux下脚本编写局域网扫描工具
|
29天前
|
Linux
Linux每五分钟执行一次某个脚本的定时任务如何写
【6月更文挑战第28天】Linux每五分钟执行一次某个脚本的定时任务如何写
16 0