2008年9月17日 星期三

簡化Smb Server新增使用者的流程(Shell Script - 1)

先前我曾經簡單的介紹過Linux中的SMB SERVER,它的用途相當吸引人,尤其是在多人需要共享資料,但是公司內又沒有M$ SERVER可做為FILE SERVER時,它就相當吸引人。

不過,如果每次新增一個人都得照步驟操作一次,人數一多,你就會覺得這機械化的動作著實做的很煩,所以,要簡化相同的流程時,在Linux中有個很強大的工具 ── 「shell script」。

簡單的說,它就像以前DOS時代(其實現在還是經常在使用),我們會自行撰寫的*.bat、com...等執行檔,能夠透過它幫我們處理既定事項,只是,在Linux中多了很多功能及函數可供我們使用。(Windows也發展出PowerShell

接著就直接切入重點,一般來說shell script的檔案型式為「*.sh」,其實在Linux中並非依副檔名做為執行的依據,所以有很多不是sh結尾的檔案,它其實也是可執行的shell script檔,主要還是得看該檔案是否具備可執行的權限(x)。

這裡,我就直接將新增使用者至SMB SERVER的步驟(請參照SMB SERVER一文),以shell script的方式呈現,內容如下:
#!/bin/bash
# ↑↑↑↑↑此為特定的編譯器,並非註解文字;
# Program:
# USE SHELL SCRIPT ADD USER IN SAMBA SERVER.
# History:
# 2008/09/17

# 讓使用者輸入ID、PW、GROUP、SAMBA_PW,並取得變數;
echo -e "change your ID|PW|GROUP|SAMBA_PW infomation."
read -p "Please input your ID(ex:mark...) : " user_name
read -p "Please input your PW(ex:wq123a.) : " user_pw
read -p "Please input your GROUP(ex:test) : " user_grp
read -p "Please input your SAMBA_PW(ex:wq123a...) : " samba_pw

# 檢查使用者是否有變數留白,並要求重新輸入;
echo "The script name is ==> $0"
if [ "$user_name" != "" ]; then
echo "The ID paramter is ==> $user_name"
else
echo "Please input ID name"
fi
if [ "$user_pw" != "" ]; then
echo "The PW paramter is ==> $user_pw"
else
echo "Please input NEW PW"
fi
if [ "$user_grp" != "" ]; then
echo "The GROUP paramter is ==> $user_grp"
else
echo "Please input NEW GROUP "
fi
if [ "$samba_pw" != "" ]; then
echo "The SAMBA_PW paramter is ==> $samba_pw"
else
echo "Please input NEW SAMBA_PW "
fi
if [ "$user_name" == "" ] || [ "$user_pw" == "" ] || \
[ "$user_grp" == "" ] || [ "$samba_pw" == "" ] ; then
echo "please run again ==>"samba_add.sh""; exit 0
fi

# 將使用者ID、PW加入SERVER主機當中;
echo -e "ADD NEW USER IN USER LIST"
useradd $user_name -p $user_pw

# 將使用者ID加入有權使用SAMBA SERVER的群組;
echo -e " ADD USER IN SAMBA GROUP "
gpasswd -a $user_name $user_grp

# 將使用者ID、和進入SAMBA SERVER的PW加入;
echo -e " ADD USER IN SAMBA USER "

echo $samba_pw > pw.txt
echo $samba_pw >> pw.txt
cat pw.txt | smbpasswd -a -s $user_name
rm -rf pw.txt

# 使用SMBCLIENT進行登入測試;
echo -e "TEST SETTINGS BY SMBCLIENT "
smbclient -L //127.0.0.1 -U $user_name%$samba_pw

# 重新啟動SAMBA SERVER;
echo -e "RESTART SAMBA SERVER "
service smb restart

# 離開shell script;
exit

其實,shell script的使用方法有很多,網路上也有一堆寫程式的高手(對它們來說這個只是小兒科吧!?)但是,對於一個從沒有受過正式訓練的我來說,能夠用它來簡化常態的工作就足夠。

我知道自己寫的script不夠好,還有很多可以簡化進步的空間,但是我自己在實際測試並寫script的同時,發現到自己會更加瞭解Linux中某些指令的操作流程,甚至會去找出該怎麼簡化、縮減多餘的輸入及操作,那過程就是最值得去嘗試的一件事。(大多數人都只看見結果,往往過程才是最精彩的部份

畢竟,自己仍是個Linux的初學者,還不到真能撰寫或竄改kernel的能力,在學習的路上能夠找出自己適用且便利的工具,或許這也是維繫自己持續學習的最大動力

最後附上這個操作平台的資訊:
OS:CENTOS 5.2
RAM:512MB
CPU:E8300
SAMBA:Samba 3.0.28-1.el5_2.1
我想,未來我應該還是繼續鑽研 shell script,歡迎有興趣的朋友一起學習、討教。