# 注意:shell腳本批量執行命令,不能只寫一個函數,然后把所有命令復制進去,之前試過這樣是不行的。必須要有一個判斷命令執行成功與否的語句
# 簡單的命令可以不加結果判斷符號,但是遇到解壓包、sed 的命令就不往下執行了。測試過
實例1、 shell腳本批量開啟防火牆端口 [mysql@www ~]$ cat firewall.sh #!/bin/bash func1(){ firewall-cmd --zone=public --add-port=10050/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=10051/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=9000/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=3306/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=80/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=8083/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=22/tcp --permanent [ $? -eq 0 ] firewall-cmd --zone=public --add-port=32250/tcp --permanent [ $? -eq 0 ] firewall-cmd --reload } func1 sudo ./firewall.sh > /dev/null #這個sudo就相當於腳本里面所有命令行寫上了sudo 實例2、 # shell腳本安裝python、pip 首先把pip-18.0.tar.gz 、Python-3.6.5.tgz 安裝包放在 /usr/local 下面,按照順序先安裝pip,再安裝python。不要先安裝或只安裝python,否則很容易出錯, [root@bogon ~]# cat pip-python.sh #!/bin/bash func1(){ yum -y groupinstall "Development tools" [ $? -eq 0 ] && yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel } func2(){ yum remove pip -y && cd /usr/local/ && tar -xf pip-18.0.tar.gz && cd pip-18.0/ && python setup.py install [ $? -eq 0 ] && echo "安裝完成pip" } func3(){ cd /usr/local/ && tar -zxvf Python-3.6.5.tgz && mv Python-3.6.5 python3 && cd python3 && ./configure && make && make install [ $? -eq 0 ] && mv /usr/bin/python /usr/bin/python.bak [ $? -eq 0 ] && ln -s /usr/local/bin/python3 /usr/bin/python && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 [ $? -eq 0 ] && whereis pip && /usr/local/bin/pip3.6 install --upgrade pip && /usr/local/bin/pip install paramiko [ $? -eq 0 ] && sed -i "1c #!/usr/bin/python2.7" /usr/bin/yum [ $? -eq 0 ] && sed -i "1c #!/usr/bin/python2.7" /usr/libexec/urlgrabber-ext-down [ $? -eq 0 ] && sed -i "1c #!/usr/bin/python2.7" /usr/sbin/firewalld [ $? -eq 0 ] && sed -i "1c #!/usr/bin/python2.7" /usr/sbin/firewalld [ $? -eq 0 ] && systemctl restart firewalld [ $? -eq 0 ] && echo "安裝完成python" } #腳本菜單函數 menu(){ clear echo "# 1. 安裝依賴包" echo "# 2. 安裝pip" echo "# 3. 安裝python" echo "# 4. 退出程序" } #功能選擇函數 choice(){ read -p "Please choice a menu[1 2 3 4]:" select } #程序開始 while true do menu choice case $select in 1) func1;; 2) func2;; 3) func3;; 4) exit;; *) echo "choice error" esac done