⑴ 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命令