多行注释 + 两个if叠加 + 函数 的用法,见下例:
echo
make
makeresult=$?
echo
tar cjf liblog4c.tbz2 liblog4c.so*
tarresult=$?
echo
usleep 500000
: << NOTE
1、多行注释 Yeah!
2、ftppp函数体定义 Yeah!
3、注意EOF必须放在行首,且不能有空格!
NOTE
ftppp ()
{
ftp -v -n 193.168.1.110 <
user default pax123
put liblog4c.tbz2 /usr1/lib/liblog4c.tgz
bye
EOF
}
: << NOTE
1、这里又是多行注释 Yeah!
2、注意下面的一段中用到了ftppp这个函数,函数体在上面定义了 Yeah!
3、不能把then用在if 这一行后面;
4、: 就是什么也不作(do nothing),即空命令。
NOTE
if [ $makeresult -eq 0 ]
then
if [ $tarresult -eq 0 ]
then
ftppp
else
echo tar error!
fi
else
echo make error!
fi
1、
这里说到了怎么 加入 与、或、非的测试命令,就像在C语言中那样:
表 31.3. 带与、或、非的测试命令
[ ! EXPR ] !表示逻辑反
[ EXPR1 -a EXPR2 ] -a表示逻辑与
[ EXPR1 -o EXPR2 ] -o表示逻辑或
2、
从这里知道 : 就是什么都不作的意思,也是知道 怎么样多行注释 的地方。
2011.5.31 ______________________________________________________________
1、
* 双引號內的特殊字元如 $ 等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』則『echo $var』可得『lang is en_US』
* 单引號內的特殊字元則僅為一般字元(純文字),如下所示:
『var='lang is $LANG'』則『echo $var』可得『lang is $LANG』
2、
在一串指令中,還需要藉由其他的指令提供的資訊,可以使用反單引號『`指令`』或 『$(指令)』。
注意:那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號!
例如想要取得核心版本的設定:
『version=·uname -r·』再『echo $version』可得『2.6.18-128.el5』
『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
题外话:
nnd,chinaunix 的这编辑器也太神奇了,那个按键竟然成了一个小芝麻点,只有一个像素!!!
3、
若該變數為擴增變數內容時,則可用 "$變數名稱" 或 ${變數} 累加內容,如下所示:
『PATH="$PATH":/home/bin』
『PATH=${PATH}:/home/bin』
这里注意:是大括号{},不是小括号()
4、
取消變數的方法為使用 unset:
『unset 變數名稱』
例如取消 myname 的設定:
『unset myname』
2011.7.7 ______________________________________________________________
从一个pdf 里摘录了下面这几个正则表达式的基本元字符,记录下来,以作备忘 ^_^
正则表达式 基本元字符
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
. 匹配任意单字符
[] 匹配 [] 内字符。可以是一个单字符,也可以是字符序列。可以使用 - 表示 [] 内字符序列范围,如用 [1-5] 代替 [12345]
\ 用来屏蔽一个元字符的特殊含义。因为有时在 shell中一些元字符有特殊含义。\可以使其失去应有意义
举个例子:
拷贝程序到虚拟机的linux 的时候,经常会带进去很多行首空格、行尾空格,可以用简单的方式除掉它们:
对行首空格,可以在vi 的命令状态下用这个命令:
0,$s/^ //
对行尾空格,可以在vi 的命令状态下用这个命令:
0,$s/ $//
在 shell 编程中,一段好的脚本与完美的脚本间的差别之一,就是要熟知正则表达式并学会使用它们。...
2011.7.21 ______________________________________________________________
~/.bash_logout
這個檔案則記錄了『當我登出 bash 後,系統再幫我做完什麼動作後才離開』的意思。...。 不過,你也可以將一些備份或者是其他你認為重要的工作寫在這個檔案中 (例如清空暫存檔), 那麼當你離開 Linux 的時候,就可以解決一些煩人的事情囉!
__________________________________
在鸟哥的上面那个链接里看到了 ~/.bash_profile 有这么一段:
if [ -f ~/.bashrc ]; then <==底下這三行在判斷並讀取 ~/.bashrc
. ~/.bashrc
fi
查了一下 “.” 在这里是什么含义,竟然发现这个“.” 就是source 的意思... 意外 ^_^
这个命令可以拿来装B用 ^_^^_^^_^
如下:
[...@localhost ...]$ man .
...
. filename [arguments]
source filename [arguments]
Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.
__________________________________
还是在鸟哥的果园里摘果子,在同一棵树(上面那个链接),摘到下面这个果子,大家尝尝看 ^_^
bash 的進站與歡迎訊息: /etc/issue, /etc/motd
蝦密! bash 也有進站畫面與歡迎訊息喔?真假?真的啊! 還記得在終端機介面 (tty1 ~ tty6) 登入的時候,會有幾行提示的字串嗎?那就是進站畫面啊! 那個字串寫在哪裡啊?呵呵!在 /etc/issue 裡面啊!先來看看:
[root@www ~]# cat /etc/issue
CentOS release 5.3 (Final)
Kernel \r on an \m
...,你可以 man issue 配合 man mingetty 得到底下的結果:issue 內的各代碼意義
\d 本地端時間的日期;
\l 顯示第幾個終端機介面;
\m 顯示硬體的等級 (i386/i486/i586/i686...);
\n 顯示主機的網路名稱;
\o 顯示 domain name;
\r 作業系統的版本 (相當於 uname -r)
\t 顯示本地端時間的時間;
\s 作業系統的名稱;
\v 作業系統的版本。
你要注意的是,除了 /etc/issue 之外還有個 /etc/issue.net 呢!...當我們使用 telnet 連接到主機時,主機的登入畫面就會顯示 /etc/issue.net 而不是 /etc/issue 呢!
至於如果您想要讓使用者登入後取得一些訊息,例如您想要讓大家都知道的訊息, 那麼可以將訊息加入 /etc/motd 裡面去!例如:當登入後,告訴登入者, 系統將會在某個固定時間進行維護工作,可以這樣做:[root@www ~]# vi /etc/motd
Hello everyone,
Our server will be maintained at 2009/02/28 0:00 ~ 24:00.
Please don't login server at that time. ^_^
那麼當你的使用者(包括所有的一般帳號與 root)登入主機後,就會顯示這樣的訊息出來:
Last login: Thu Feb 5 22:35:47 2009 from 127.0.0.1
Hello everyone,
Our server will be maintained at 2009/02/28 0:00 ~ 24:00.
Please don't login server at that time. ^_^
__________________________________
还是在鸟哥的果园里摘果子,在同一棵树(上面那个链接),又摘到几个小果子 ^_^
組合按鍵 執行結果
Ctrl + C 終止目前的命令
Ctrl + D 輸入結束 (EOF),例如郵件結束的時候;
Ctrl + M 就是 Enter 啦!
Ctrl + S 暫停螢幕的輸出
Ctrl + Q 恢復螢幕的輸出
Ctrl + U 在提示字元下,將整列命令刪除
Ctrl + Z 『暫停』目前的命令
底下我們列出一些常用的萬用字元喔:
符號 意義
* 代表『 0 個到無窮多個』任意字元
? 代表『一定有一個』任意字元
[ ] 同樣代表『一定有一個在括號內』的字元(非任意字元)。例如 [abcd] 代表『一定有一個字元, 可能是 a, b, c, d 這四個任何一個』
[ - ] 若有減號在中括號內時,代表『在編碼順序內的所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的!
[^ ] 若中括號內的第一個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 的其他字元就接受的意思。
除了萬用字元之外,bash 環境中的特殊符號有哪些呢?底下我們先彙整一下:
符號 內容
# 註解符號:這個最常被使用在 script 當中,視為說明!在後的資料均不執行
\ 跳脫符號:將『特殊字元或萬用字元』還原成一般字元
| 管線 (pipe):分隔兩個管線命令的界定(後兩節介紹);
; 連續指令下達分隔符號:連續性命令的界定 (注意!與管線命令並不相同)
~ 使用者的家目錄
$ 取用變數前置字元:亦即是變數之前需要加的變數取代值
& 工作控制 (job control):將指令變成背景下工作
! 邏輯運算意義上的『非』 not 的意思!
/ 目錄符號:路徑分隔的符號
>, >> 資料流重導向:輸出導向,分別是『取代』與『累加』
<, << 資料流重導向:輸入導向 (這兩個留待下節介紹)
' ' 單引號,不具有變數置換的功能
" " 具有變數置換的功能!
` ` 兩個『 ` 』中間為可以先執行的指令,亦可使用 $( )
( ) 在中間為子 shell 的起始與結束
{ } 在中間為命令區塊的組合!