关闭shell脚本
⑴ 如何写个简单的脚本关闭当前的shell窗口
你可以选择一本python方面的书籍,一版教程上都有讲到python如何进行图形界面程序开发。一般的python是通过使用图形界面库快速开发图形程序。库有好多种。教程里一般都有介绍。各有优缺点。默认安装了python就自带一个图形界面库,那就是Tkinter。python的自带编辑器和shell解释器就是这个界面。除此之外用得比较广的还有wxpython库,等等。这些可以到网上了解了解。教程也有得看。使用起来相当方便。
⑵ Shell 脚本 if 判断后,怎么终止当前脚本但不退出 shell
代码如下:
if list then
do something here
elif list then
do another thing here
else
do something else here
fi
EX1:
复制代码代码如下:
#!/bin/sh
SYSTEM=`uname -s` #获取操作系统类型,我本地是linux
if [ $SYSTEM = "Linux" ] ; then #如果是linux的话打印linux字符串
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ] ; then
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi #ifend
基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。
⑶ 如何在出错时自动退出bash shell脚本
用set -e内建:
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
或者,您可以传递-e命令行:
bash -e my_script.sh
您也可以使用禁用此行为set +e。
注意:
壳确实不退出如果失败的命令是紧跟在所述命令列表的一部分而或直到关键字,以下测试的一部分,如果或elif的保留字,在执行任何命令的一部分&&或|| 列表,除了最后的&&或||之后的命令 ,在管道中的任何命令,但最后,或者如果命令的返回值被反转 !
⑷ 如何关闭shell脚本回显
不显示任何输出信息可以在产生输出信息的位置加 > /dev/null,例如 echo aaa > /dev/null,这样不会产生任何输出信息。
⑸ shell脚本关闭“确定”按钮问题
在shell脚本中一般用expect来实现交互,shell 是基于TCL语言开发的,所以要先安装tcl再安装expect。
⑹ Linux 网络文件系统(NFS):随nfs一起启动关闭的shell脚本程序怎么写
vim /etc/init.d/nfs 打开nfs (截取了脚本在命中参数为start和stop的部分,hello.c程序就加入这两状态后面)
...
...
&& RPCMOUNTDOPTS="$RPCMOUNTDOPTS -p $MOUNTD_PORT"
case $MOUNTD_NFS_V1 in
no|NO)
RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 1" ;;
esac
case $MOUNTD_NFS_V2 in
no|NO)
RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 2" ;;
esac
case $MOUNTD_NFS_V3 in
no|NO)
RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3" ;;
esac
echo -n $"Starting NFS mountd: "
daemon rpc.mountd $RPCMOUNTDOPTS
RETVAL=$?
echo
[ $RETVAL -ne 0 ] && exit $RETVAL
touch /var/lock/subsys/nfs
# Let rpc.idmapd know that rpc.mountd just started
[ -x /usr/sbin/rpc.idmapd ] && /sbin/service rpcidmapd condstart
#写入执行hello.c的脚本
;;
stop)
# Stop daemons.
echo -n $"Shutting down NFS mountd: "
killproc rpc.mountd
echo
echo -n $"Shutting down NFS daemon: "
killproc nfsd -2
echo
if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
echo -n $"Shutting down NFS quotas: "
killproc rpc.rquotad
RETVAL=$?
echo
fi
# Do it the last so that clients can still access the server
# when the server is running.
cnt=`/usr/sbin/exportfs -v | /usr/bin/wc -l`
if [ $cnt -gt 0 ]; then
action $"Shutting down NFS services: " /usr/sbin/exportfs -au
else
action $"Shutting down NFS services: " /bin/false
fi
[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop
rm -f /var/lock/subsys/nfs
#写入执行hello.c的脚本
;;
status)
[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd status
status rpc.mountd
status nfsd
if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
status rpc.rquotad
fi
RETVAL=$?
;;
restart)
$0 stop
$0 start
;;
...
...
⑺ 如何使用shell脚本停止应用
参考最底下的shell 代码,具体功能都有注释说明的。 使用时将代码存入文件中,比如 a.sh, 然后:
chmod+xa.sh#增加可执行权限
./a.shapp_name#替换app_name为你要中止运行的app名称,比如firefox,emacs,等等
下面是具体代码
#!/bin/bash
#要停止的应用名字
name=$1
#先要找到你要停止的应用的PID(进程号).这里用pidof命令来找
PID=`pidof$name`
#如果没有找到,结束
if[-z"$PID"];then
echo"Error:Process$nameisnotfound"
exit1
fi
#然后用kill命令来向进程发送信号来终止应用
#-9表示发送KILL信号,任何进程收到这个信号后都会无条件终止运行。
kill-9$PID
#完成
echo"Done"
⑻ shell脚本中如何关闭终端
欢迎来到渗透吧,请不要再本吧发送任何接单收徒信息,为了本吧首页版面干净,解md5请去专门的md5解密贴。
⑼ Linux中,shell脚本如何使用信号机制去控制线程的开启关闭
trap是Linux的内建命令,用于捕捉信号,trap命令可以指定收到某种信号时所执行的命令。trap命令的格式如下:trap command sig1 sig2 ... sigN,当接收到sinN中任意一个信号时,执行command命令,command命令完成后继续接收到信号前的操作,直到脚本结束。利用trap命令捕捉INT信号(即与Ctrl+c绑定的中断信号)。trap还可以忽略某些信号,将command用空字符串代替即可,如trap "" TERM INT,忽略kill %n和Ctrl+c发送的信号(kill发送的是TERM信号)。Linux更强劲的杀死进程的命令:kill -9 进程号(或kill -9 %n作业号)等价与kill -KILL 进程号。
举个例子:
最近小A需要生产2015年全年的KPI数据报表,现在小A已经将生产脚本写好了,生产脚本一次只能生产指定一天的KPI数据,假设跑一次生产脚本需要5分钟,那么:
如果是循环顺序执行,那么需要时间:5 * 365 = 1825 分钟,约等于 6 天
如果是一次性放到linux后台并发执行,365个后台任务,系统可承受不住哦!
既然不能一次性把365个任务放到linux后台执行,那么,能不能实现自动地每次将N个任务放到后台并发执行呢?当然是可以的啦。
#!/bin/bash
source/etc/profile;
#-----------------------------
tempfifo=$$.fifo#$$表示当前执行文件的PID
begin_date=$1#开始时间
end_date=$2#结束时间
if[$#-eq2]
then
if["$begin_date">"$end_date"]
then
echo"Error!$begin_dateisgreaterthan$end_date"
exit1;
fi
else
echo"Error!Notenoughparams."
echo"Sample:shloop_kpi2015-12-012015-12-07"
exit2;
fi
#-----------------------------
trap"exec1000>&-;exec1000<&-;exit0"2
mkfifo$tempfifo
exec1000<>$tempfifo
rm-rf$tempfifo
for((i=1;i<=8;i++))
do
echo>&1000
done
while[$begin_date!=$end_date]
do
read-u1000
{
echo$begin_date
hive-fkpi_report.sql--hivevardate=$begin_date
echo>&1000
}&
begin_date=`date-d"+1day$begin_date"+"%Y-%m-%d"`
done
wait
echo"done!!!!!!!!!!"
第6~22行:比如:sh loop_kpi_report.sh 2015-01-01 2015-12-01:
$1表示脚本入参的第一个参数,等于2015-01-01
$2表示脚本入参的第二个参数,等于2015-12-01
$#表示脚本入参的个数,等于2
第13行用于比较传入的两个日期的大小,>是转义
第26行:表示在脚本运行过程中,如果接收到Ctrl+C中断命令,则关闭文件描述符1000的读写,并正常退出
exec 1000>&-;表示关闭文件描述符1000的写
exec 1000<&-;表示关闭文件描述符1000的读
trap是捕获中断命令
第27~29行:
第27行,创建一个管道文件
第28行,将文件描述符1000与FIFO进行绑定,<读的绑定,>写的绑定,<>则标识对文件描述符1000的所有操作等同于对管道文件$tempfifo的操作
第29行,可能会有这样的疑问:为什么不直接使用管道文件呢?事实上这并非多此一举,管道的一个重要特性,就是读写必须同时存在,缺失某一个操作,另一个操作就是滞留,而第28行的绑定文件描述符(读、写绑定)正好解决了这个问题
第31~34行:对文件描述符1000进行写入操作。通过循环写入8个空行,这个8就是我们要定义的后台并发的线程数。为什么是写空行而不是写其它字符?因为管道文件的读取,是以行为单位的
第37~42行:
第37行,read -u1000的作用就是读取管道中的一行,在这里就是读取一个空行;每次读取管道就会减少一个空行
第39~41行,注意到第42行结尾的&吗?它表示进程放到linux后台中执行
第41行,执行完后台任务之后,往文件描述符1000中写入一个空行。这是关键所在了,由于read -u1000每次操作,都会导致管道减少一个空行,当linux后台放入了8个任务之后,由于文件描述符1000没有可读取的空行,将导致read -u1000一直处于等待。