『壹』 linux的shell腳本中等待子程序執行超時
判斷進程是否存在。示例:
timer=20#20s定時器
flag=1#標識進程是否存在
while[$timer-gt0]
do
sleep2
ps-aux|grep進程名|grep-vgrep>/dev/null#查詢進程
[$?-ne0]&&flag=0&&break#進程不存在了就退出循環
lettimer-=1
done
[$flag-eq1]&&kill-9$(ps-aux|awk'/bash$/{print$1}')
『貳』 緊急求助SHELL腳本執行問題
sh -x 看一下
你的while循環中的<<FTPIT 需要在後邊做個收尾,這個模式是
<<EOF
(內容)
EOF
所以你需要在結尾加上FTPIT,要不這個內容就沒結束。
跟分號不分號沒任何關系
ftp -i -n $ipadd <<FTPIT
user $ftpuser $ftppwd
echo "connect $ipadd success!"
cd /home/dcms/test
binary
get $line
echo "get file $line "
close
bye
FTPIT
『叄』 為什麼我用python調用了process運行後程序沒報錯但是子進程不會執行
這是因為multiprocessing模塊在交互模派行式是不支持的,在 cmd 里頭啟羨此輸入 python xxx.py 來悄迅運行起來,你就可以看到子進程的執行了。
『肆』 mysql是用的.sh寫的腳本,執行後提示沒有命令
在Shell中執行mysql的腳本,這里介紹比較容易使用的一種方法
首先寫好sql的腳本,後綴為.sql,比如
sql_file.sql:內容如下
#這是SQL的腳本
create table if not exists test_sql(id int(10),name varchar(20));
insert into test_sql values(1,'正餐');
select * from test_sql;
很簡單的創建、插入、查詢
之後shell的腳本,內容如下
#!/bin/bash #這是執行SQL的腳本,傳入資料庫表,和SQL文件名即可
name=$1
file_name=$2
cd /opt/lampp/bin ./mysql -uroot -p123456 <<EOF
use ${name};
source ${file_name};
EOF
./mysql -uroot -p123456是進入mysql的命令,前面的路徑可以改成自己的絕對路徑
<< EOF EOF 中間可以寫出任意的mysql腳本
其中,如果要執行某個.sql的命令,直接用 source 腳本.sql 即可執行該腳本上面的命令,這里使用的是source sql_file.sql
此外,如果在mysql中需要執行shell腳本
可以在EOF中 ./mysql -uroot -p123456<<EOF \! sh shell.sh EOF
前面加上 !\ +linux中執行的shell命令即可
『伍』 怎麼運行腳本
首先腳本需要有執行許可權
chmo+xfile.sh
執行腳本有三種方法:
1../file.sh
特點:開啟bash子進程來執行,也就是開啟額外的進程來進行,不影響原進程的變數、配置等
2.bashfile.sh
特點:和./file.sh相同
3.sourcefile.sh或者.file.sh
特點:在原bash進程中執行腳本。
第三種方法主要用於在腳本中切換用戶su、切換目錄cd等命令。
source和.命令是相同的。
你可以搜索source
補充,如何查看腳本運行是否開啟了bash子進程
vim file.sh
寫入
#!/bin/bash
#echo $$命令會輸出bash進程ID
echo $$
保存並賦予可執行許可權chmod u+x file.sh
在你的shell中輸入,echo $$ 屏幕輸出4176
./file.sh 屏幕輸出3600
bash file.sh 屏幕輸出3984
source file.sh 屏幕輸出4176 和 你直接在shell中輸出的一樣,說明是在同一個bash進程