關閉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一直處於等待。