朋友找我在一台機器上幫忙安裝下discuz。想着搭建過好幾次的lnmp了,但是還沒有使用過“一鍵安裝”的自動化腳本,去網上有搜尋出來,但是運作的時候發現用root運作别人的腳本還是真危險的事情,于是明白這不是個輪子,而是個井,每個程式員有必要自己挖一口的了。是以想着自己寫個自動化安裝lnmp的腳本lnmp_auto。
1
2
3
4
5
<code>if</code> <code>[</code><code>$uid</code> <code>-ne 0 ]</code>
<code>then</code>
<code> </code><code>echo</code> <code>"error: you must be root to run the script!"</code>
<code> </code><code>exit</code> <code>1</code>
<code>fi</code>
有很多種方法,但是如果要輸出最簡單明了的估計是這種方法了:
<code>machine_long_bit=$(getconf long_bit)</code>
6
7
8
9
10
11
12
13
<code>if</code> <code>grep -q mysql /etc/group</code>
<code> </code><code>echo</code> <code>"mysql group exists"</code>
<code>else</code>
<code> </code><code>groupadd mysql</code>
<code>if</code> <code>groups mysql | grep -q -e</code><code>' mysql(\s|$)'</code>
<code> </code><code>echo</code> <code>"mysql user exists"</code>
<code> </code><code>useradd -r -g mysql mysql</code>
<code>filelist=`ls</code><code>$binary_mysql_path</code><code>/bin`</code>
<code>for</code> <code>filename in</code><code>$filelist</code>
<code>do</code>
<code> </code><code>ln -sn --force</code><code>$binary_mysql_path</code><code>/bin/</code><code>$filename</code> <code>/bin/</code><code>$filename</code>
<code>done</code>
我們一般使用sed "s/xxxx/oooo/" file來做替換
但是如果xxxx中包含/并且還有可能包含變量的話,就需要将/符号替換成:了
<code>sed -i</code><code>"s:/usr/local/mysql/data:${binary_mysql_path}/data:"</code> <code>mysql.server.init</code>
在shell中注釋一行代碼是#,那麼注釋一段代碼就需要使用:<<block
<code>:<<block</code>
<code>binary_mysql_path=</code><code>"$root_path"</code><code>/binary/mysql</code>
<code>if</code> <code>[ ! -d</code><code>"$binary_mysql_path"</code> <code>]</code>
<code> </code><code>mkdir</code> <code>-p</code><code>$binary_mysql_path</code>
<code>block</code>
使用read指令将輸出記錄到一個變量中
<code>checkinstall=</code><code>"n"</code>
<code>read -p</code><code>"are you sure want to install php into service?(y/n):"</code> <code>checkinstall</code>
<code>if</code> <code>[</code><code>$checkinstall</code><code>=</code><code>"y"</code> <code>]</code>
<code>…</code>
<code>sed -i</code><code>"s/enforcing/disabled/"</code> <code>/etc/selinux/config</code>
這裡的i參數就是在目前檔案直接做替換,如果覺得不保險可以先做備份
這裡不是擷取目前的路徑(目前路徑直接使用pwd就可以擷取),比如我在/home/yejianfeng,運作sh lnmp_auto/lnmp_auto.sh,如何擷取到lnmp_auto.sh的檔案夾路徑/home/yejianfeng/lnmp_auto/
<code>$(cd</code><code>"$(dirname "</code><code>$0</code><code>")"</code><code>; pwd)</code>