bash shell快捷命令
shell的種類
- 一般常見的shell有底下這幾種,只要在命令列下指令即可改變你的shell。
- The Bourne shell (/bin/sh)
- The Bourne again shell (/bin/bash)
- The Korn-Shell (/bin/ksh)
- The C-Shell (/bin/tcsh)
- The TC-Shell (/bin/tcsh)
mtchang@centos:~> tcsh
centos /home/mtchang> sh
mtchang@centos:~> exit
centos /home/mtchang> exit
exit
mtchang@centos:~>
File Globbing(檔名展開字元)
- Globbing wildcard expansion:
- * 符合 zero or more 字元任何長度的字串包括 0 字元 (except“.” at the beginning of a file name and “/”).
- ? 符合 any single 字元(except “/”)
- [0-9] 符合一段範圍的數字
- [abc] 符合清單內的任意的字元
- [^abc] 符合去除所有清單內的任意的字元
- [a-z] 此段範圍的任意字元 (here: lowercase letters from a to z).
- [a-ek-s] 任意字元從這段 a-e 及 k-s.
- Globbing(檔名展開字元) 和 regular express(正規表示式)不一樣。
- Globbing範例:
- 先建立幾各範例檔案,以方便做練習。但在作下列練習前,請先建立一個test目錄並且切換成 student 這個使用者。
[root@server1 ~]# su - student
[student@server1 ~]$ mkdir test
[student@server1 ~]$ cd test/
[student@server1 test]$
[student@server1 test]$
touch
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}_{0,1,2,3,4,5,6,7,8,9}
[student@server1 test]$ ls
a_0 c_6 f_2 h_8 k_4 n_0 p_6 s_2 u_8 x_4
a_1 c_7 f_3 h_9 k_5 n_1 p_7 s_3 u_9 x_5
a_2 c_8 f_4 i_0 k_6 n_2 p_8 s_4 v_0 x_6
a_3 c_9 f_5 i_1 k_7 n_3 p_9 s_5 v_1 x_7
a_4 d_0 f_6 i_2 k_8 n_4 q_0 s_6 v_2 x_8
a_5 d_1 f_7 i_3 k_9 n_5 q_1 s_7 v_3 x_9
a_6 d_2 f_8 i_4 l_0 n_6 q_2 s_8 v_4 y_0
a_7 d_3 f_9 i_5 l_1 n_7 q_3 s_9 v_5 y_1
a_8 d_4 g_0 i_6 l_2 n_8 q_4 t_0 v_6 y_2
a_9 d_5 g_1 i_7 l_3 n_9 q_5 t_1 v_7 y_3
b_0 d_6 g_2 i_8 l_4 o_0 q_6 t_2 v_8 y_4
b_1 d_7 g_3 i_9 l_5 o_1 q_7 t_3 v_9 y_5
b_2 d_8 g_4 j_0 l_6 o_2 q_8 t_4 w_0 y_6
b_3 d_9 g_5 j_1 l_7 o_3 q_9 t_5 w_1 y_7
b_4 e_0 g_6 j_2 l_8 o_4 r_0 t_6 w_2 y_8
b_5 e_1 g_7 j_3 l_9 o_5 r_1 t_7 w_3 y_9
b_6 e_2 g_8 j_4 m_0 o_6 r_2 t_8 w_4 z_0
b_7 e_3 g_9 j_5 m_1 o_7 r_3 t_9 w_5 z_1
b_8 e_4 h_0 j_6 m_2 o_8 r_4 u_0 w_6 z_2
b_9 e_5 h_1 j_7 m_3 o_9 r_5 u_1 w_7 z_3
c_0 e_6 h_2 j_8 m_4 p_0 r_6 u_2 w_8 z_4
c_1 e_7 h_3 j_9 m_5 p_1 r_7 u_3 w_9 z_5
c_2 e_8 h_4 k_0 m_6 p_2 r_8 u_4 x_0 z_6
c_3 e_9 h_5 k_1 m_7 p_3 r_9 u_5 x_1 z_7
c_4 f_0 h_6 k_2 m_8 p_4 s_0 u_6 x_2 z_8
c_5 f_1 h_7 k_3 m_9 p_5 s_1 u_7 x_3 z_9
[mtchang@mt test]$ ls a_[0-9]
a_0 a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 a_9
[mtchang@mt test]$ ls [abc]_[0-9]
a_0 a_2 a_4 a_6 a_8 b_0 b_2 b_4 b_6 b_8
c_0 c_2 c_4 c_6 c_8 a_1 a_3 a_5 a_7 a_9
b_1 b_3 b_5 b_7 b_9 c_1 c_3 c_5 c_7 c_9
[mtchang@mt test]$ ls [^abc]_[^1-9]
d_0 f_0 h_0 j_0 l_0 n_0 p_0 r_0 t_0 v_0 x_0 z_0
e_0 g_0 i_0 k_0 m_0 o_0 q_0 s_0 u_0 w_0 y_0
[mtchang@mt test]$ ls [a-cx-z]_[^1-9]
a_0 b_0 c_0 x_0 y_0 z_0
- 練習:
- 請先建立一個 test 目錄並建立下列範例檔案。
[student@server1 test]$
touch {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}_{0,1,2,3,4,5,6,7,8,9}
- 請使用 rm 指令,配合 File Globbing 字元快速的刪除檔案到剩下下列給各檔案。
[lccnet@server1 test]$ ls
i_0 l_0 n_0 u_0 x_0
檔案及命令補齊功能
- 指令補齊功能
- 檔案名稱補齊功能
mtchang@centos:~/test> rm test
# 按下tab or ctrl+i
test$_ kk test.txt
mtchang@centos:~/test> rm test\$_\ \ kk
history指令歷史
- 可以使用上下鍵or PageDown PageUp 觀看上一次及下一次的命令
- 可以執行history 觀看所有下過的命令
- 可以使用ctrl+r搜尋曾下過的命令
- 可以使用Esc 放棄指令
- 可以使用Alt- 選取指令
- 可以用「!行號」來執行命令
- 可以使用兩個「!!」來執行上一個指令
- 可以使用「!字元」來找到起始於此字元的命令
- 可以使用「!$」執行最後一個正確的命令
- 使用 「^新字串^舊字串」來取代上一個執行成功的命令
[mtchang@mt test]$ ls a_?
a_0 a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 a_9
[mtchang@mt test]$ ^a^z
ls z_?
z_0 z_1 z_2 z_3 z_4 z_5 z_6 z_7 z_8 z_9
命令列延伸
Tilde(~)
# 參考他人的
[root@localhost ~]# ls ~lcc09/ -l
總計 8
drwxr-xr-x 5 lcc09 users 4096 5月 21 00:38 Projects
# 參考自己的
[root@localhost ~]# ls ~/.bash_profile
/root/.bash_profile
Bash 變數
- Variables are named values
-
-
-
[lcc09@localhost ~]$ echo "this system's name is $(hostname)"
this system's name is localhost.localdomain
[lcc09@localhost ~]$ h="$(date +%Y%m%d)"
[lcc09@localhost ~]$ echo $h
20070525
- Prevent the Shell from Interpreting Special Characters
命令與括號變數輸出設定
- $(command)符號 : 將$()中command的結果以引數的方式輸出
- `` 功能同 $()
[mtchang@mt test]$ hostname
mt.cm.nsysu.edu.tw
[mtchang@mt test]$ echo "This system's name is $hostname "
This system's name is
[mtchang@mt test]$ echo "This system's name is $(hostname) "
This system's name is mt.cm.nsysu.edu.tw
[mtchang@mt test]$ echo "This system's name is `hostname` "
This system's name is mt.cm.nsysu.edu.tw
-
# 輸出目前日期
[student@server1 ~]$ echo $(date +%Y%m%d%s)
200903211237614976
# 輸出日期內容到變數 t
[student@server1 ~]$ t=$(date +%Y%m%d%s)
# 輸出日期內容到變數 tt , `` 功能同 $()
[student@server1 ~]$ tt=`date +%Y%m%d%s`
# 顯示變數 $t
[student@server1 ~]$ echo $t
200903211237614981
# 顯示變數 $tt
[student@server1 ~]$ echo $tt
200903211237614986
# 運用變數的結果於命列上面
[student@server1 ~]$ mkdir $t $tt
# 驗證
[student@server1 ~]$ ls -l
drwxrwxr-x 2 student student 4096 3月 21 13:56 200903211237614981
drwxrwxr-x 2 student student 4096 3月 21 13:56 200903211237614986
-
[lcc09@localhost ~]$ touch file{1,3,5}
[lcc09@localhost ~]$ ls file* -l
-rw-r--r-- 1 lcc09 users 0 5月 21 03:50 file1
-rw-r--r-- 1 lcc09 users 0 5月 21 03:50 file3
-rw-r--r-- 1 lcc09 users 0 5月 21 03:50 file5
[lcc09@localhost ~]$ rm -f file{1,3,5}
[lcc09@localhost ~]$ ls file* -l
ls: file*: 沒有此一檔案或目錄
雙引號、單引號及脫逸字元
- \:脫逸字元保護特殊字元不被shell解釋掉
- "...": 雙引號
- '...' 單引號
mtchang@centos:~/test> mkdir new \ directory
mtchang@centos:~/test> echo "$HOME"
/home/mtchang
mtchang@centos:~/test> echo '$HOME'
$HOME
mtchang@centos:~/test> echo "$HOME'test'"
/home/mtchang'test'
shell
命令修改
- Ctrl-a 移動到命令的前面
- Ctrl-e 移動到命令的最後
- Ctrl-u 從頭開始刪除
- Ctrl-k 刪除到尾部
- Ctrl-arrow 左右移動
gnome-terminal
- Applications->Accessories->Terminal
- 在終端機畫面中,可以使用的hot key
- Ctrl-Shift-t 建立一個新的終端機分頁
- Ctrl-PgUp/PgDn 上一個或下一個終端機分頁
- Ctrl-Shift-c 拷貝
- Ctrl-Shift-v 貼上
- Ctrl + PgUp 單個分頁向上翻頁
- Ctrl + PgDown 單個分頁向下翻頁
script 基礎
- Shell scripts 是個文字檔案,且存放順序被執行的敘述(指令)。
- Shell scripts 通常使用在:
- 自動執行經常被使用的命令。
- 執行系統管理和除錯
- 簡單的應用程式
- 操作文字或檔案
shell script
step 1
- shell script第一行一定為直譯程式的路徑
- #!/bin/bash
- 在shell script裡面要加註解,需使用「#」
- 經常在使用shell程式
- !/bin/bash - 大多數的 linux 作業系統
- !/bin/sh 常用的 unix-like 作業系統
- !/bin/csh 常用於 BSD 作業系統
- !/usr/bin/perl 進階的Perl程式語言,完整的語言
- !/usr/bin/python 更進階的 python scripts 物件導向的語言
- !/bin/php 目前當紅的php也可以當成script
step 2
chmod u+x myscript.sh
- To execute the new script:
- Place the script file in a directory in the executable path -OR-
- Specify the absolute or relative path to the script on the command line
簡單的shell script範例(use bash shell)
[root@server1 ~]# nano hello.sh
#!/bin/bash
# This script displays date and time
echo " The date and time are $(date)"
echo " hello linux !! "
[root@server1 ~]# chmod +x hello.sh
[root@server1 ~]# ls hello.sh -l
-rwxr-xr-x 1 root root 111 Dec 19 23:26 hello.sh
[root@server1 ~]# ./hello.sh
The date and time are Wed Dec 19 23:26:30 CST 2007
hello linux !!
簡單的shell script範例(use php-cli)
[student@server1 sh]$ vim h.php
#!/usr/bin/php
[student@server1 sh]$ chmod +x h.php
[student@server1 sh]$ ./h.php
The date and time are Mon, 07 Dec 2009 19:41:08 CST
hello linux !!
沒有留言:
張貼留言