學以致用二十二-----寫一個基本環境設定的指令碼
每次安裝完系統後,需要配置一些基礎的環境。因此試著寫了一個指令碼,以後再裝了新的作業系統後,可以用這個指令碼來實現配置。
功能:1、更改主機名
2、關閉禁用防火牆
3、關閉sellinux
4、增加時間戳
5、關閉編輯或者輸出錯誤的警告音
程式碼如下:
1 #!/usr/bin/bash 2 #2018-10-18 3 #lion 4 #setup base environment include hosname selinux firewalld 5 selinux_file=/etc/selinux/config 6 Color_text() 7 { 8 echo -e "\e[1;$2m$1\e[0m" 9 } 10 Echo_red() 11 { 12 echo $(Color_text "$1" "31") 13 } 14 Echo_green() 15 { 16 echo $(Color_text "$1" "32") 17 } 18 Echo_yellow() 19 { 20 echo $(Color_text "$1" "33") 21 } 22 Echo_blue() 23 { 24 echo $(Color_text "$1" "34") 25 } 26 update_hostname() 27 { 28 read -p "input new hostname:" host_name 29 echo $host_name > /etc/hostname 30 #echo -e "Hostname updated successful\n"31 Echo_green "Hostname updated successful\n" 32 } 33 34 close_firewall() 35 { 36 systemctl stop firewalld.service 37 systemctl disable firewalld.service &> /dev/null 38 systemctl status firewalld.service &> /dev/null 39 [ $? -ne 0 ] && Echo_green "firewall closed successful\n" 40 } 41 disable_selinux() 42 { 43 status=$(cat ${selinux_file} | grep '^SELINUX' | awk -F'=' 'NR==1{print $2}') 44 if [ "${status}" != "disabled" ] ; then 45 sed -i "s/SELINUX=${status}/SELINUX=disabled/g" /etc/selinux/config 46 else 47 Echo_yellow "selinux has diabled\n" 48 fi 49 } 50 add_timestamp() 51 { 52 histtime=$(grep 'HISTTIMEFORMAT' /etc/profile) 53 [ -z "${histtime}" ] && echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile && source /etc/profile || Echo_green "timesstamp has added\n" 54 } 55 #vim_check() 56 #{ 57 # vim_version=$(vi --vesion | grep 'IMProved' | awk '{print $5}') 58 # if [ ${vim_version} < 8 ];then 59 # yum remove vi 60 # . vim_install 61 # else 62 # #echo -e "vim version is already 8,nothing to do\n" 63 # Echo_yellow "vim version is already 8,nothing to do\n" 64 # fi 65 #} 66 67 off_warning_voice() 68 { 69 echo "setterm -blength 0" >> /etc/bashrc 70 sed -i '/bell-style/s/^#//g' /etc/inputrc 71 } 72 menu() 73 { 74 clear 75 Echo_blue "\t\tCheck base envionment" 76 echo -e "\t1.Update hostname" 77 echo -e "\t2.Close firewalld" 78 echo -e "\t3.Disable selinux" 79 echo -e "\t4.Add timetamp" 80 echo -e "\t5 warining voice" 81 echo -e "\t0.Exit menu" 82 read -p "Enter an option:" choice 83 # echo -en "Enter an option:" 84 # read -n 1 choice 85 } 86 87 while [ 1 ] 88 do 89 menu 90 case $choice in 91 0) 92 break 93 ;; 94 1) 95 update_hostname 96 ;; 97 2) 98 close_firewall 99 ;; 100 3) 101 disable_selinux 102 ;; 103 4) 104 add_timestamp 105 ;; 106 5) 107 off_warning_voice 108 ;; 109 *) 110 clear 111 Echo_red "invalid option\n" 112 esac 113 #echo -en "\tHit any key to continue:" 114 #read -n 1 line 115 read -p "Hit any key to continue:" 116 done
寫此次程式碼的目的:
1、 加強對函式呼叫的學習
2、while 迴圈 ,
while [ 1 ] 表示無限迴圈,注意[ 1 ] 中括號裡兩邊是有空格的,shell指令碼對空格控制挺嚴格
3、學會選單的使用及case的用法,已esac結尾
4、read的用法
read -n 1 line 表示只接受一個字串輸入,如果超出則馬上輸出,(由於輸出的效果不佳,已註釋)
5、字型顏色的函式呼叫
Color_text()
{
echo -e "\e[1;$2m$1\e[0m"
}
6、加強 if語句的練習
7 、 [ -z 條件 ] 是否為空
8、 status=$(cat ${selinux_file} | grep '^SELINUX' | awk -F'=' 'NR==1{print $2}')
複習 awk的用法 -F'=' 以=為分隔符,預設是空格為分隔符
NR==1{print $2}
NR,表示awk開始執行程式後所讀取的資料行數.此處表示打印出第一行,第二列
9、 複習sed的用法
sed -i "s/SELINUX=${status}/SELINUX=disabled/g" /etc/selinux/config
sed -i ‘s/old/new/g’ 替換
sed -i '/bell-style/s/^#//g' /etc/inputrc 先匹配bell-style這行,然後把行首的#替換為空,等價於刪除行首的#
/s/^#//g
10、 systemctl disable firewalld.service &> /dev/null
&> 輸入輸出不打印出來,重定向到/dev/null裡
11、echo -e 處理特殊字元,使其生效
echo -n 不換行輸出
echo -ne 兩者結合
以前對shell指令碼不理解,或者是看到別人寫的指令碼,只能看懂一部分,因此對shell指令碼總有點抵觸或者發忪的情緒在裡面,通過這段時間對shell指令碼的加強練習,以及自己去寫指令碼,不斷嘗試和修改,並借鑑其他指令碼好的用法,終於對shell指令碼有了全新的認識
並且對shell指令碼的興趣也越發濃厚。
多看,多練習,多總結,生活源於一點一滴的積累