shell指令碼學習使用for迴圈批量解壓檔案

2021-08-06 04:14:37 字數 1555 閱讀 8753

一、編寫shell指令碼

vim ugiz.sh

#!/bin/bash

cd /home

#首先要把要解壓的檔案(tar.gz格式),放入乙個檔案中

ls *.tar.gz > ls.log

#這樣就會把所有的檔名儲存到ls.log檔案中

for i in $(cat ls.log)    #這裡可以使用linux命令cat

dotar -zxf $i  & >/dev/null

done

#刪除檔案

rm -rf ls.log

二、批量建立資料庫

vim cdatabases.sh;

#!/bin/bash

user=root

password=ailong

socket=/usr/local/mysql/mysql.sock

mycmd="mysql -u$user -p$password -s $socket"

for((i=1;i<65;i++))

do$mycmd -e "create database db$i"

done

在執行.sh指令碼時會出現

bash: ./a.sh: /bin/bash^m: bad interpreter: no such file or directory

解決辦法:

什麼原因呢, 我們有理由懷疑是檔案格式問題? 我們用vim a.sh進入a.sh這個檔案, 然後在底部模式下, 執行

:set ff

檢視一下, 結果發現fileformat=dos, 看看, 果然是檔案格式問題, 那怎麼解決呢?

方法一:vim a.sh進入a.sh後, 在底部模式下, 執行:set fileformat=unix後執行:x或者:wq儲存修改。 然後就可以執行./a.sh執行指令碼了。(我親自試過, 是ok的)

方法二:直接執行sed -i "s/\r//" a.sh來轉化, 然後就可以執行./a.sh執行指令碼了。(我親自試過, 是ok的)

方法三:直接執行dos2unix ./a.sh來轉化, 然後就可以執行./a.sh執行指令碼了。(我的linux上執行dos2unix ./a.sh失敗, 但是不要放棄啊, 加個busybox就可以了), 如下:

[plain]view plain

copy

dos2unix a.sh   

bash: dos2unix: command not found  

[taoge@localhost learn_shell]$ busybox dos2unix a.sh   

[taoge@localhost learn_shell]$  

實際上, 經過上述三種方法修改後, 我們都可以再用:set ff再查一下, 發現a.sh的fileformat果然是unix了。  第三種方法最方便, 建議用第三種!

Shell指令碼學習18 Shell for迴圈

與其他程式語言類似,shell支援for迴圈。for迴圈一般格式為 for 變數 in 列表 do command1 command2 commandn done列表是一組值 數字 字串等 組成的序列,每個值通過空格分隔。每迴圈一次,就將列表中的下乙個值賦給變數。in 列表是可選的,如果不用它,fo...

shell 指令碼學習

case var in pattern statement esac case 的指令碼語法是雙分號結尾的。sed e s i.86 i386 查詢替換。sed 流編輯器 將輸入流中的i.86替換成i386。是個萬用字元。輸入流的形式可能是 管道,檔案。shell d mkdir p 指令碼的條件執...

shell指令碼學習

shell 學習 1.shell 解釋型語言,有很多種直譯器。預設是 bin bash。shell指令碼第一行要寫 bin bash 2.shell指令碼執行的方法 1 sh sh 2 chmod a x sh sh 注意,一定要寫成.sh,而不是 sh。執行其它二進位制的程式也一樣,直接寫 sh,...