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,歡迎有興趣的朋友一起學習、討教。

7 則留言:

  1. 很冒昧來打擾您!
    您是藍眼觀注得主

    前次「愛美萬萬歲」以最高票落選
    這是第二次入圍「藍眼觀注」
    特來向您拜票
    懇請您惠賜一票
    http://blog.yam.com/withyou520

    回覆刪除
  2. 這樣簡化工作,真是好方法,
    感謝分享~~

    回覆刪除
  3. bill:
    高票落選,這我好像也有遇過,下次再加油吧!很多事重要的是過程,結果就...再看看囉!^^"(等會去過去給票的!)

    荷包蛋:
    多謝你的打氣呀!我剛過去你家看了一下,發現也是個不錯的地方唷!^^大家互相勉勵加油吧!

    回覆刪除
  4. 老大真是好樣的,左手 U*ix 右手 windows。

    小的對 U*ix 下面的 Shell script 沒啥感覺,原生就是 text mode OS 的 script 當然應該有多變點把戲的能耐,但 windows 的 Powershell 倒是首次聽說,嗯,這也算是無心插柳柳橙汁的例子嗎?

    多謝了,小弟又長了一分知識 :-)

    回覆刪除
  5. JEFF:
    你言重了呀!其實我是因為礙於現實跟很多因素,所以不得不兩者都摸,除此之外,我自己覺得玩類unix的OS,可以對一些原理更清楚一些。

    WINDOWS的是真的人性化許多,也好操控,但是骨子裡做些什麼事...真的不得而知(所以他們才可以開班授課??)

    話說,我還曾為了LINUX去繳了那昂貴的補習費(近十年來唯一補過的習),雖然最後我還是沒去考那張證照,但是有人領進門還是比較不一樣。

    重點是工作的環境上可以實作才是王道呀!因為太久沒摸很容易忘記的呀!(我扯遠了...)

    powershell,其實很久沒有更新的樣子,我也是有所聞,實際上我也是只有玩過BAT這一類的東西,真的要套上POWERSHELL,應該還有它的遊戲規則吧!只能說戲法人人會變各有巧妙不同呀!(在WINDOWS裡也可以用別的方式硬跑SHELL SCRIPT呀!^^")

    回覆刪除
  6. Hi!
    我是㊣軟體玩家的阿正老師,這篇文章滿實用的(我也算是個MIS),給你拍拍手!(雖然我都習慣用webmin來新增帳號XD )

    有空來我的站(http://blog.soft.idv.tw)逛逛吧,順便交換一下連結~

    回覆刪除
  7. 阿正老師:

    你客氣了呀!歡迎你大駕光臨,要交換連結呀!(要怎麼交換呢?文字link??)

    其實阿正老師的部落格我先前就知道了呀!MIS的辛酸我想只有從事過的人才會知道吧!(不過聽老師的口氣應該是"兼任"吧!)

    用WEBMIN也是挺方便的沒錯...但是我工作的主機~通常只會有很單純的用途~連WEB SERVER都不一定會開!所以很多時候都只有存文字用SSH進去玩而已!^^"

    交換連結的部份,我就先加在旁邊囉!^^

    回覆刪除