⑴ Linux中sh脚本异常:bad interpreter: No such file or directory
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执扮蔽行会报以上异常信息。
解决:1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先厅脊州将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)也可在Linux中转换:
首先要确保文件有可执行权限
#sh>chmod a+x filename
然后修改文件格式
#sh>vi filename
利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
fileformat=dos 或 fileformat=unix
利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)
最后再执行文野轿件
#sh>./filename
⑵ crontab中启动的shell脚本不能正常运行,但是使用手动执行没有问题
1、这种情况多数为环境变量加载问题
2、例如你用ls命令,其实依赖PATH环境变量
3、可以改为全路径,比如/bin/ls
4、或者将环境变量加载到脚本
#!/bin/sh
. ~/.bash_profile
ls -lrt $*
⑶ 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命令即可
⑷ shell脚本运行不了
在本脚本内,你的执行是成功的,echo也可以正常输出,但是脚本退出以后,export就失效了,可以查一下相关文档,./***.sh会启动一个子进程,脚本退出后,子进程的内容是不能影响父进程的,你可以使用source **.sh来完成这个功能,不过头部要改一下
#! /bin/bash
⑸ shell 脚本为何无法运行
第一,脚本权限要为可执行 #chmod +x test.sh
第二,脚本所在的目录在环境变量 PATH 中,或者直接执行 #./test.sh
关于shell脚本这块的知识,请查阅书籍《Linux就该这么学》
⑹ linux定时任务调用shell时脚本中的存储过程不执行
1、被执行的脚本没有执行权限,这种情况 直接授权
chmod 755 xxx.sh
2、被执行的脚本编码有问题,这种情况直接转码
dos2unix xxx.sh
我们也可下载一个windows版的dos2unix,转完码后再上传到Linux服务器
补充:linux定时任务
每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
1月1日早上4点
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/
每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:1、如果两个文件都不存在,则只有root用户才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令