來分享一個簡單的sheel Script
功能介紹:
單純的查詢目前ip為何
使用說明:
./ip.sh [enter]
輸入目前連線的介面!比如接網路線就打eth0
或無線網卡就打eth1
#/bin/bash
# Program:
# Let User quick see now ip is whta?
# can Choise Lan/Wlan interfaces ip
#
# History:
# 2008/03/20 Radius First Script
echo "Lan / Wlan Interfaces ip is What?"
read -p "please input you Lan interfaces?( ex: eth0) :" et
#et_check=`echo $et |grep '[eE][tT][0-9]'`
#此行不必理會原先是要做驗證使用者輸入的
case $et in
#case $1 in
"eth0")
ip=`ifconfig eth0 |grep inet|sed s/^.*addr://g|sed s/Bca.*$//g`
echo "IP Address From eth0 : $ip"
;;
"eth1")
ssid=`iwconfig eth1 |grep ESSID|sed s/^.*802.11g\ \ //g`
ip=`ifconfig eth1 |grep 'inet addr'|sed s/^.*addr://g|sed s/Bca.*$//g`
echo "$ssid IP Address: $ip"
;;
*)
echo "Usage {eth0|eth1|eth2}"
;;
esac
root@ubuntu:~/#./ip.sh
Lan / Wlan interfaces ip is what ?
please input you lan interfaces?(ex: eth0) : eth0
IP Address From eth0 :210.55.22.xx
please input you lan interfaces?(ex: eth0) : eth1
ESSID:"Wl-520G" IP Address:192.168.2.1 無線網路會秀出目前ssid
寫這個shell只是好玩!方便查詢!
還可以有更多的功能!讓你能更容易的管理你的主機
傳承科技專門處理硬碟資料遺失,硬碟壞軌及異聲
各式隨身碟資料搶救,不過電及各種記憶卡如SD、MS、XD、CF
精通各種筆電改裝作業系統、MAC APPLE、LINUX、WINXP、VISTA
精緻服務盡在傳承 專業服務快速完工
1003 07/07 希捷Barracuda 7200.11全系列機瘟硬碟,傳承可處理
0925 突破!北京台商研發新隨身碟 插上電腦就可看臺灣頻道
0918 MSN霸道!強制更新9.0版本 剝奪舊版用戶登錄權
0907 告別硬碟 GDrive個資保密引疑慮
0906 為防止Downadup疫情擴大插入隨身碟請暫停使用「自動播放」功能
0903 兩倍牧場容量「2TB」硬碟一顆要8999元
2008年3月20日 星期四
[+/-] |
[Shell]快速查詢目前ip的小程式 |
[+/-] |
[Shell]Shell Script 中 Testing 判斷式的介紹 |
Testing 判斷式通常與if-then-else一起互用, 以便發揮其效果.
先從一個最簡單的例子看起 :
$ cat myscript7
#!/bin/sh
if [ -f /etc/passwd ]; then
echo "/etc/passwd is a file"
else
echo "PANIC : /etc/passwd is not a file!!"
fi
先說明一下 [ -f /etc/passwd ] 這個最重要的部份, [ ] 裡面
就是判斷式, 而這裡是判斷 /etc/passwd 是不是一個 file ?
由結果來看看是執行 then 下面的敘述, 或者執行 else 的敘述.
同時很重要一點是 底下這些敘述都是不正確的敘述, 會有錯誤產生喔 :
[-f /etc/passwd ] [-f 連在一起
[ -f /etc/passwd] passwd] 連在一起
[ -f/etc/passwd ] -f與/etc/passwd連在一起
所以利用 [ ] 我們可以做出以下這些判斷, 這些也都很常用喔 !!
語法 說明
--------------------------------------------------------------------------------
[ string1 = string2 ] string1 and string2 are equal
[ string1 != string2 ] string1 and string2 are not equal
[ string1 < string2 ] string1 is lexically less than string2
(e.g. 'a' is less than 'b')
[ string1 > string2 ] string1 is lexically greater than string2
(e.g. 'b' is greater than 'a')
[ -z string ] string is zero (e.g. a empty string)
[ -n string ] string is nonzero (e.g. a VAR string)
[ -e file ] file exists
[ -f file ] file is a file
[ -d file ] file is a directory
[ -c file ] file is a character device
[ -b file ] file is a block device
[ -p file ] file is a named pipe
[ -s file ] file is not empty
[ -k file ] file's sticky bit is set
[ -S file ] file is a socket
[ -L file ] file is a symbolic link
[ -r file ] file is readable by user
[ -w file ] file is writeable by user
[ -x file ] file is executeable by user
[ -O file ] file is owner by user
[ -G file ] file is group owned by a greoup
[ -u file ] file has its set user ID bit set
[ -g file ] file has its group user ID bit set
[ file1 -nt file2 ] file1 is newer than file2
[ file1 -ot file2 ] file1 is older than file2
[ file -ef file2 ] file1 is another name for file2
[ n1 -eq n2 ] true if integer n1 = integer n2
[ n1 -ne n2 ] true if integer n1 <> n2
[ n1 -gt n2 ] true if n1 > n2
[ n1 -ge n2 ] true if n1 >= n2
[ n1 -lt n2 ] true if n1 < n2
[ n1 -le n2 ] true if n1 <= n2
轉貼http://poppc.tw/~jason/index.php?load=read&id=17
2008年3月15日 星期六
[+/-] |
[RE]Grep與ls 延伸應用 |
常常我們會用ls來查看常用的可能是ls -al 觀看隱藏及詳細資料
那麼如何看的出來是檔案還是目錄~或許你會說看一個屬性的最前面有d就是目錄沒有就是檔案
這樣說也對!那如果只是用ls來查看呢?有些distro能夠秀出深藍色是目錄、白色是檔案
(通常都是系統預設alias='ls --color=auto')所造成的
ls -F 能夠將是目錄的在檔名後面加上一個/,來辨識!
有時在同一個目錄(/etc)下要找一個檔案名為cron*開頭的
但下ls cron* 卻是出現檔案及目錄夾雜的結果
cd /etc
ls -F |grep '^cron'
cron.d/
cron.daily/
cron.hourly/
cron.monthly/
cron.weekly/
crontab
我想上面應該不是我想要的結果
上面列出5個目錄一個檔案,而那個crontab剛好是我要找的
於是我這樣做..
ls -F |grep '^cron' |grep -v '/'
crontab
聰明的你~應該知道為何了吧
在舉一個例子
在/etc底下我要找 rc開頭的目錄不要檔案
ls rc* <--一定不行
ls -dl rc* or ls -d rc* 都可以(這是比較詳細的資料)
精簡的ls -F |grep rc
inputrc
nanorc
rc.local
rc0.d/
rc1.d/
.....
screenrc
哇!好多!都不是我要的!我要的是目錄且是rc開頭
試試這個
ls -F |grep '^rc'
rc0.d/
rc1.d/
ps: -F是在目錄後面加上/
延申:ls -d ./* |grep '^./rc" <---這樣也行 不過多此一舉!
前面兩個例子:第一個是找檔案,第二個是找目錄
接下來要介紹~精簡列出想要找的隱藏檔案
ls -aF |grep '^\.' |grep -v /
分別解說一下
ls -aF <-- 列出.的隱藏檔(包含目錄)並且在目錄後面加上/
grep '^\.' < ---- 找出以.開頭的檔案或目錄
grep -v / < ----既然找出.開頭的資料就用反向選擇的方式把目錄給移除
這樣就剩下我要的隱藏檔案
此例子是用於一個目錄底下很多隱藏檔跟目錄時比較有用!
應該還有更好的方式~ 只是我暫時沒想到
請各位分享一下!
grep 的-v是 反向選擇的意思 就是有/就移除該列
ps:記的擷取命令指令如cut,grep通常是針對『一行一行』來分析的, 並不是整篇訊息分析的
新增一個例子:
每當我們要用ps aux 查看那一個程式的運作PID時
會用
ps aux |grep 'ssh'
常常會列出兩個
一個是
grep ssh 與
/usr/sbin/sshd
通常會用此方法在移除不要的資訊
ps aux |grep ssh |grep -v grep
ok!
延伸閱讀: 底下有前輩的一些經驗分享
那如何列出所在目錄下的子目錄而不要其他檔案呢?
有了 ls -F 再加個 l 再來個 grep 就可以辦到了
ls -Fl | grep '.*/$'
很好你會用 grep 而且也懂什麼是 RE 和輸出導向
但是有一個更簡單的方法可以達到相同的目的
ls -d */.
是不是更簡單呢?但它包含了一個不是很常用的-d 參數,RE 及 Filesystem 的觀念
有時候一個目錄下面一堆檔案我們會用 ls | less 來分頁,但是就沒有多欄顯示了,怎麼樣才可以概有分頁的功能又可以像正常的ls 一樣分成多個欄位呢?
man ls 你會發現有一個 -C 可以用
ls -C | less 你會發現有什麼不同。
你能了解到 grep 和 egrep 的差異時你又更上一層了。
ls -alhS 列出隱藏檔並排列大小並以人類易懂的方式(例如 GB, KB 等等)列出來
r :將排序結果反向輸出
2008年3月14日 星期五
[+/-] |
[Variable]變數與單引號雙引號之認知 |
echo $PATH 同echo ${PATH}
name=Radius\'s\ name
echo $name
Radius's name
利用反斜線 (\) 跳脫特殊字元 如上例單引號與空白鍵
新增變數內容於變數裡
以上面接著為例
name=$nameisgood <--新增isgood <---是錯誤的
會變成name= $nameisgood <這個變數
正確應該是
name="$name"isgood
或
name=${name}isgood
要讓name這個變數能夠在子程序中能夠使用
export name <---透過 export 將變數變成環境變數
bash
echo $name
Radius's nameisgood <-成功秀出
exit
那麼在變數的設定當中,單引號與雙引號的用途有何不同?
單引號與雙引號的最大不同在於雙引號仍然可以保有變數的內容,但單引號內僅能是一般字元 ,而不會有特殊符號
上面的理論很重要唷!切記
舉個例:
name=Radius
myname="$name is good"
echo $myname
Radius is good
myname='$name is good'
$name is good
懂了嗎!
另外在雙引號裡面的空白與單引號可不加\來跳脫特殊字元
因為被雙引號給括在裡面
下面是不加雙引號的寫法:
myname=$name\ is\ good
變數與變數內容以等號『=』來連結;
等號兩邊不能直接接空白字元;
變數名稱只能是英文字母與數字,但是數字不能是開頭字元;
若有空白字元可以使用雙引號『 " 』或單引號『 ' 』來將變數內容結合起來,但須要特別留意, 雙引號內的特殊字元可以保有變數特性,但是單引號內的特殊字元則僅為一般字元;
必要時需要以跳脫字元『 \ 』來將特殊符號 ( 如 Enter, $, \, 空白字元, ' 等 ) 變成一般符號;
在一串指令中,還需要藉由其他的指令提供的資訊,可以使用 quote 『 ` command` 』;(特別特別注意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號!)
若該變數為擴增變數內容時,則需以雙引號及 $變數名稱 如:『 "$PATH":/home』繼續累加內容;
若該變數需要在其他子程序執行,則需要以 export 來使變數變成環境變數, 如『export PATH』;
通常大寫字元為系統預設變數,自行設定變數可以使用小寫字元,方便判斷 ( 純粹依照使用者興趣與嗜好 ) ;
取消變數的方法為:『unset 變數名稱』。
FYI
2008年3月4日 星期二
[+/-] |
[RE]只列出Ifconfig 的IP |
ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' |sed 's/Bcast.*$//g'
如果你是ppp0
ifconfig ppp0 | grep 'inet '
inet addr:61.22.11.22 P-t-P:61.22.11.254 Mask:255.255.255.255
ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' |sed 's/Bcast.*$//g'
61.22.11.22
解釋
grep 'inet ' > 只列出inet這一列
參數 s/原字串/取代值/旗標(flags)
sed 's/^.*addr://g' >> s是取代意思 ^行首之後 .*(零個或多個任意字元)包括空白
.*add: >取代成空白值 而後面的g代表 全區域不限定搜尋到的第一組
正規表示法 Regular Expression, RE
2007年11月17日 星期六
[+/-] |
[Linux]串流編輯工具Sed深入了解 |
先來簡單介紹Sed由來
此工具是所有Unix系統都有的過濾工具,如其名sed
它能夠讀來自stdin(標準輸入)或檔案的文字串流,依據給他的指示及程式
來改變內容輸出到 Stdout(標準輸出)
主要的語法:
sed [options] 'Command' [files]
常用參數:
-e cmd 後面接命令(此參數可加可不加)
編輯命令:
常用的s(替換),d(刪除),g(全域替換),a(新增),c(取代)
下面我們用舉例方式才能深入你心ㄚ
s(替換):
以我們常用的ifconfig eth0來說,一般我們打此指令為了要看ip或maceth0
Link encap:Ethernet HWaddr 74:73:F1:52:8A:1A
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
那麼我只要截取addr:192.168.1.11 的地方,該怎做呢?ifconfig eth0|grep 'inet '|sed 's/^.*addr://g'\
>sed 's/Bcast//g' 按enter
結果:192.168.1.11 成功輸出我們要的結果
上面最後一個\符號是讓您新增一個行程每增加一個行程都要在加上\這符號唷!
因為我一行打不下為了不破壞一整行的連貫性 就用這種方式來show
你可想成只是把|管線換成\來輸入 差別在於"一次打完與分次打" 懂了吧!
其實把每一個管線分開打,在結合在一起 就可以看出端倪了!grep 'inet '
這是因為我們只要inet這一行所以就先用grep來截取inet此行列sed 's/^.*addr://g'
上列為將行首到":"之間的字元取代,取代欄無任何字串所以是刪除的意思,
其語法是s/欲更改值/欲替換值/旗標
所以s/^.*addr: <- ^.* 的^是指行首開始 .* 就代表零個或多個任意字元
而後面的 //g <- /空/g 因為裡面的替換值是空的所以就等於刪除 g就是全域替換
所以如果命令只輸入到此 結果會是:ifconfig eth0|grep 'inet '|sed 's/^.*addr://g'\
結果:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
前面的inet addr:不見了但Bcast之後還在..
所以還需要在輸入以下行程:sed 's/Bcast.*$//g'
分解語法:從Bcast一直到最後面都取代成替換值 因為無替換值就全刪除
Bcast.*$ <-從b一直到行尾間的字串都會被取代的意思 懂了吧!ㄏㄏ
ps.上述都有用到正規表示法,所以建議要有一些概念會比較容易理解
待續...