当前位置:网站首页>Additional Features for Scripting
Additional Features for Scripting
2022-08-01 23:11:00 【Dreamer 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]$ 边栏推荐
- SRv6 L3VPN的工作原理
- C#大型互联网平台管理框架源码:基于ASP.NET MVC+EF6+Bootstrap开发,支持多数据库
- JS prototype hasOwnProperty in Add method Prototype end point Inherit Override parent class method
- 13、学习MySQL 分组
- Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D Solution
- 关于ETL的两种架构(ETL架构和ELT架构)
- 编曲软件FL studio20.8中文版功能和作用
- SQL Server (design database--stored procedure--trigger)
- 得物客服热线的演进之路
- excel split text into different rows
猜你喜欢

From 0 to 100: Notes on the Development of Enrollment Registration Mini Programs

编曲软件FL studio20.8中文版功能和作用

测试岗月薪5-9k,如何实现涨薪到25k?

程序员如何优雅地解决线上问题?

还在纠结报表工具的选型么?来看看这个

img 响应式图片的实现(含srcset属性、sizes属性的使用方法,设备像素比详解)

D - Linear Probing- 并查集

下载安装 vscode(含汉化、插件的推荐和安装)

Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D Solution

C语言——分支语句和循环语句
随机推荐
C语言——分支语句和循环语句
excel edit a cell without double clicking
研发团队数字化转型实践
How to use pywinauto and pyautogui to link the anime lady and sister please go home
Background project Express-Mysql-Vue3-TS-Pinia page layout-sidebar menu
y84.第四章 Prometheus大厂监控体系及实战 -- prometheus告警机制进阶(十五)
JS 数组去重(含简单数组去重、对象数组去重)
When using DocumentFragments add a large number of elements
Chapter 11 Working with Dates and Times
img 响应式图片的实现(含srcset属性、sizes属性的使用方法,设备像素比详解)
npm包【详解】(内含npm包的开发、发布、安装、更新、搜索、卸载、查看、版本号更新规则、package.json详解等)
【C语言进阶】文件操作(二)
数据分析04
复现gallerycms字符长度限制短域名绕过
域名重定向工具 —— SwitchHosts 实用教程
Chapter 12 End-User Task As Shell Scripts
移动端人脸风格化技术的应用
chrome复制一张图片的base64数据
SQL29 Calculate the average next day retention rate of users
JS prototype hasOwnProperty in Add method Prototype end point Inherit Override parent class method