当前位置:网站首页>Additional Features for Scripting
Additional Features for Scripting
2022-08-01 22:59:00 【梦想家DBA】
1.1 "Daemon-izing" Your Script
Use the following to invoke your script, run it in the background, and still allow yourself to log out:
[[email protected] test]$ nohup mydaemonscript 0<&- 1>/dev/null 2>&1 &
[1] 209178
[[email protected] test]$ nohup mydaemonscript >>/var/log/myadmin.log 2>&1 <&- &
[2] 209179
[1] Exit 127 nohup mydaemonscript 0>&- > /dev/null 2>&1
[[email protected] test]$ -bash: /var/log/myadmin.log: Permission denied
[2]+ Exit 1 nohup mydaemonscript >> /var/log/myadmin.log 2>&1 0>&-
[[email protected] test]$
But what about STDIN? The cleanest way to deal with STDIN is to close the file descriptor. The bash syntax to do that is like a redirect, but with a dash for the filename (0<&- or <&-).
We use the nohup command so that the script is run without being interrupted by a hangup signal when we log off.
1.2 Reusing Code with Includes and Sourcing
[[email protected] test]$ sh -x use_prefs.sh
+ source /home/maxwell/shelllearning/test/myprefs.cfg
++ SCRATCH_DIR=/var/tmp
++ IMG_FMT=png
++ SND_FMT=ogg
+ cd /var/tmp
+ echo You prefer png image files
You prefer png image files
+ echo You prefer ogg sound files
You prefer ogg sound files
[[email protected] test]$ cat myprefs.cfg
SCRATCH_DIR=/var/tmp
IMG_FMT=png
SND_FMT=ogg
[[email protected] test]$ cat use_prefs.sh
#!/bin/bash
#
# use the user prefs
#
source $HOME/shelllearning/test/myprefs.cfg
cd ${SCRATCH_DIR:-/tmp}
echo You prefer $IMG_FMT image files
echo You prefer $SND_FMT sound files
[[email protected] test]$
1.5 Using Functions: Parameters and Return Values
# define the function:
function max ( )
{ ... }
#
# call the function:
#
max 128 $SIM
max $VAR $CNT
[[email protected] test]$ sh -x max 128 $SIM
[[email protected] test]$ echo $BIGR
[[email protected] test]$ cat max
#!/bin/bash
#cookbook filename: func_max
# define the function:
function max ()
{
local HIDN
if [ $1 -gt $2 ]
then
BIGR=$1
else
BIGR=$2
fi
HIDN=5
}
[[email protected] test]$
1.6 Trapping Interrupts
Use the trap utility to set signal handlers. First, use trap -l (or kill -l) to list the signals you may trap. They vary from system to system:
[[email protected] test]$ trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[[email protected] test]$
[[email protected] test]$ cat hard_to_kill.sh
#!/bin/bash -
trap ' echo "You got me! $?" ' ABRT EXIT HUP INT TERM QUIT
trap ' echo "Later... $?"; exit ' USR1
sleep 120
[[email protected] test]$ sh -x hard_to_kill.sh
+ trap ' echo "You got me! $?" ' ABRT EXIT HUP INT TERM QUIT
+ trap ' echo "Later... $?"; exit ' USR1
+ sleep 120
^C++ echo 'You got me! 130'
You got me! 130
+ echo 'You got me! 130'
You got me! 130
[[email protected] test]$ sh -x hard_to_kill.sh &
[1] 209366
[[email protected] test]$ + trap ' echo "You got me! $?" ' ABRT EXIT HUP INT TERM QUIT
+ trap ' echo "Later... $?"; exit ' USR1
+ sleep 120
[[email protected] test]$ kill -USR1 %1
[[email protected] test]$ User defined signal 1
++ echo 'Later... 138'
Later... 138
++ exit
+ echo 'You got me! 0'
You got me! 0
[1]+ Done sh -x hard_to_kill.sh
[[email protected] test]$ sh -x hard_to_kill.sh &
[1] 209374
[[email protected] test]$ + trap ' echo "You got me! $?" ' ABRT EXIT HUP INT TERM QUIT
+ trap ' echo "Later... $?"; exit ' USR1
+ sleep 120
[[email protected] test]$ kill %1
[[email protected] test]$ Terminated
++ echo 'You got me! 143'
You got me! 143
+ echo 'You got me! 143'
You got me! 143
[1]+ Exit 143 sh -x hard_to_kill.sh
[[email protected] test]$
边栏推荐
- xctf攻防世界 Web高手进阶区 webshell
- ROS2初级知识(8):Launching启动多节点
- 解决yolov5训练时出现:“AssertionError: train: No labels in VOCData/dataSet_path/train.cache. Can not train ”
- Quarantine and downgrade
- 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
- xctf攻防世界 Web高手进阶区 web2
- 10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?|TakinTalks大咖分享
- 别看了,这就是你的题呀
- 下载安装 vscode(含汉化、插件的推荐和安装)
- System availability: 3 9s, 4 9s in SRE's mouth... What is it?
猜你喜欢
小程序中的多表联合查询
一种灵活的智能合约协作方式
从0到100:招生报名小程序开发笔记
威纶通触摸屏如何打开并升级EB8000旧版本项目并更换触摸屏型号?
Ten years after graduation, financial freedom: those things that are more important than hard work, no one will ever teach you
How to add a game character to a UE4 scene
Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D Solution
小程序毕设作品之微信体育馆预约小程序毕业设计成品(4)开题报告
Still struggling with reporting tool selection?To take a look at this
xctf attack and defense world web master advanced area webshell
随机推荐
从0到1:图文投票小程序设计与研发笔记
JS prototype hasOwnProperty in 加方法 原型终点 继承 重写父类方法
基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
A. Doremy‘s IQ-- Codeforces Round #808 (Div. 1)
小程序中的多表联合查询
SQL Server (design database--stored procedure--trigger)
如何使用pywinauto和pyautogui将动漫小姐姐链接请回家
xctf攻防世界 Web高手进阶区 web2
欧拉路径与欧拉回路
No more rolls!After joining ByteDance for a week, he ran decisively.
PAM 回文自动机
美赞臣EDI 940仓库装运订单详解
Use Jenkins for continuous integration, this knowledge point must be mastered
Deep learning Course2 first week Practical aspects of Deep Learning exercises
Postman 批量测试接口详细教程
Go 微服务开发框架DMicro的设计思路
excel edit a cell without double clicking
46.全排列
解决 win10 下 ISE14.7的 iMPACT 崩溃问题 - FPGA 笔记
小程序毕设作品之微信美食菜谱小程序毕业设计成品(7)中期检查报告