Shell程式設計基礎-04-一鍵安裝和配置

xiaoxaoyu發表於2020-11-27

未完待續

#!/bin/bash
#待安裝列表
INSTALL_LIST="jdk-8u111-linux-x64.tar.gz 
hadoop-2.6.0-cdh5.14.2.tar.gz 
hive-1.1.0-cdh5.14.2.tar.gz 
zeppelin-0.8.2-bin-all.tgz 
zookeeper-3.4.5-cdh5.14.2.tar.gz 
hbase-1.2.0-cdh5.14.2.tar.gz 
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz"


#驗證待安裝列表所需原始檔是否都存在
LIST=`ls /opt/download/hadoop`

for item in $INSTALL_LIST
do
        if [[ $LIST =~ $item ]]
        then
                continue
        else
                echo "install exit abnormally,for the lack of $item"
                exit 0
        fi
done
#上面的程式碼是通過查詢資料夾裡的檔案,然後和最上面的檔案清單逐一比對,比對成功則進入下面的程式碼

#解壓和重新命名
echo "start to installing"

echo "first,we'll unpack all the items ..."
#確保解壓目錄存在
DEST_DIR="/opt/software/"	#設定目標路徑
if [[ ! -e $DEST_DIR ]]	#如果目標路徑不存在
then
        RST=`mkdir $DEST_DIR`	#建立目標路徑
fi
#建立重新命名的檔案清單陣列,和上面要安裝的檔案清單一一對應,建立一個虛擬索引來對應上
RENAME_LIST="jdk180 hadoop260 hive110 zeppelin082 zookeeper345 hbase120 sqoop146"
RENAME_LIST=($RENAME_LIST)
IX=0

cd /opt/software	#上面建立完目錄後,進入此目錄,因為解壓縮的指令 -C 在這裡暫時沒有方法執行
echo "change dir to "`pwd`

for item in $INSTALL_LIST	#遍歷待解壓的檔案
do
        if [[ $item =~ tar|gz$ ]]	#如果這個元素滿足tar或gz結尾的格式
        then
                echo "start to unpack $item ..."	#輸出開始解壓的提示
                #${STR##*WORD},刪除'.tar'前面所有的資訊。
                #如果是.gz格式的,則OPT等於.gz,如果是.tar格式的,則等於空
                OPT=${item##*.tar}	
                #根據上一條指令進行判斷[ $OPT ],如果不為空,就是.gz結尾的壓縮檔案,
                #則返回返回字串“z”拼接到xf(後臺壓縮)上,反之則為.tar檔案。
                OPT="-"$([ $OPT ] && echo "z" || echo "" )"xf"	
                #eval是掃描兩次後面的程式碼,第二次根據第一次掃描的結果執行。
                #該句第一次掃描將引用轉為命令,第二次掃描執行該命令
                RST=`eval "tar $OPT /opt/download/hadoop/$item"`	
                echo $RST
                #eval同上一條。裡邊內容是mv oldname newname,
                #${item%%-*}*是把原始檔從後往前的所有-後面的內容都刪掉
                #然後用*去匹配所有包含前面欄位(比如hadoop)的檔案,
                #匹配上了就改名為RENAME_LIST裡對應的元素
                RST=`eval "mv ${item%%-*}* ${RENAME_LIST[$IX]}"`	
                echo "unpack $item and rename to ${RENAME_LIST[$IX]} ok"
        fi
        ((IX++))
done

相關文章