‘壹’ 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进程