Windows編寫的shell指令碼,在linux上無法執行
阿新 • • 發佈:2018-11-25
前兩天由於要查一個數據庫的binlog日誌,經常用命令寫比較麻煩,想著寫一個簡單的指令碼,自動去刷一下資料庫的binlog日誌,就直接在windows上面寫了,然後拷貝到linux中去執行,其實很簡單的指令碼,具體如下:
#!/bin/bash #flush mysql logs every day BASEDIR="/usr/local/mysql" echo $BASEDIR BIN="$BASEDIR/bin" echo $BIN MYSQL="$BIN/mysql" echo $MYSQL USER="root" PASSWORD="123456" PORT=1234 OPERTATION="flush logs" for IP_ADDR in {'192.168.1.108','192.168.1.110','192.168.1.118'} do echo "$MYSQL --host=$IP_ADDR --port=$PORT --user=$USER --password=$PASSWORD -e $OPERTATION" done
就是一個很簡單的重新整理資料庫日誌的操作,用了一個迴圈語句而已,拷貝到linux上面時,死活就報錯,顯示for迴圈的語法不對,命令操作路徑不對。
晚上查了好久,就是不能用,而且整個命令的路徑都變了,在原檔案上刪除了所有的命令,重新手敲,還是不行,一度懷疑自己寫的shell是有問題的,找了一個測試的機子,將命令拷貝上去,發現是正常的。為了能夠驗證我的指令碼是正常的,我都用echo將要執行的命令打印出來了。但是在生產環境上,就是不行,突然想到了格式的問題,dos2unix,嘗試著轉換了一次之後,正常了。太坑了。
dos2unix將Windows上的格式,轉換成linux上可執行的格式。