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  ,如需转载请自行联系原作者






相关文章
|
11天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
93 6
|
12天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
48 3
|
12天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
37 2
|
7天前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
43 7
|
6天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
34 3
|
12天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
44 3
|
15天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
49 6
|
16天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
25 7
|
12天前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
28 1
|
15天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
17 2
下一篇
无影云桌面