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月前
|
安全 Linux
【Linux】阻塞信号|信号原理
本教程从信号的基本概念入手,逐步讲解了阻塞信号的实现方法及其应用场景。通过对这些技术的掌握,您可以更好地控制进程在处理信号时的行为,确保应用程序在复杂的多任务环境中正常运行。
278 84
|
7月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
344 1
|
8月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
9月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
147 26
|
9月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
155 17
|
10月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
297 20
|
10月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
338 12
|
12月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
1398 7
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
280 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
12月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
233 1