BASH環境介紹
时间:2007-03-12 来源:darrenshen
http://www.linuxsir.org/bbs/archive/index.php/t-23387.html
http://www.ccu.edu.tw/center/ycnet/seminar/linux.89.7.4.doc
BASH環境介紹 日期:89/7/10
講師:郭錦賢
壹、認識shell
一、shell發展與角色
1960年代,unix系統剛發展出?頃r,需要一個完整的使用者與作業系統溝通的介面。第一個出現的shell為AT&T S.R. Bourne 所發展的Bourne shell,也就是sh。以後又有Korn shell (ksh),BSD C shell (csh),Enhanced C shell (tcsh),等等,Linux預設使用shell為Bourne Again shell (bash),bash是根據sh發展出?恚瑫r具有csh及ksh的優點。
shell本身是一個可執行的程式,它是使用者進入系統後,第一個執行的程式,它介於使用者與kernel之間,它幫使用者解譯指令,是使用者與機器之間的介面,主要工作是提供使用者一個良好的使用環境,讓使用者易於使用系統。
二、各種shell
1.sh --Bourne shell,最早的shell,在Linux中/bin/sh是一個符號連結到/bin/bash。
2.ash --ash是Small Bourne shell。是Linux裡最小的shell,內鍵功能也最少。執行檔為/bin/ash。
3.ksh --Korn shell由sh發展而?恚琸sh缺乏工作控制指令。執行檔為/bin/ksh。
4.csh --C shell語法與C很像,提供指令編輯、指令記錄,指令自動完成功能,在Linux中/bin/csh是一個符號連結到/bin/tcsh。
5.tcsh --Enhanced C shell,是csh的加?姲妗绦袡n為/bin/tcsh。
6.bash --Bourne Again shell擁有csh及ksh的特色,也供指令編輯、指令記錄,指令自動完成功能。執行檔為/bin/bash。
7.zsh --Linux中最大的shell之一,功能也很?姟绦袡n為/bin/zsh。
三、進入shell
*檢視shell
echo $SHELL
cat /etc/shells 使用者所使用的shell,除了有執行檔之外,也須列於/etc/shell檔案中。
*變更shell
chsh
*提示符號(prompt)
shell 提示符號
bash [\u@\h \W]\$
tcsh [%n@%m %c]$
ash $
ksh [\u@\h \W]\$
zsh \h%
四、使用不同的shell
[guo@amigo guo]$ tcsh
[guo@amigo ~]$
[guo@amigo ~]$ exit
exit
[guo@amigo guo]$ ash
$ exit
[guo@amigo guo]$
貳、環境設定
所謂環境指的就是各項shell下的控制及設定,包括終端機型式、檔案搜尋路?健⑹褂谜吣夸洝⑾到y提示符號等等。有關環境的控制都是透過環境變數?碓O定,每一個環境變數控制一項設定。
[guo@amigo guo]$ env|more
LESSOPEN=|/usr/bin/lesspipe.sh %s
USERNAME=
HISTSIZE=1000
HOSTNAME=amigo
LOGNAME=guo
REMOTEHOST=140.123.3.56
MAIL=/var/spool/mail/guo
TERM=vt100
HOSTTYPE=i386
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
KDEDIR=/usr
HOME=/home/guo
INPUTRC=/etc/inputrc
SHELL=/bin/bash
USER=guo
BASH_ENV=/home/guo/.bashrc
QTDIR=/usr/lib/qt-2.1.0
LANG=en_US
OSTYPE=Linux
*環境變數表示法:
$環境變數
[guo@amigo /]$ cd $HOME
[guo@amigo guo]$
一、檢視環境變數
[guo@amigo guo]$ env|more
[guo@amigo guo]$ set|more
*HOME 使用者家目錄
*LOGNAME 使用者帳號名稱
*PATH 使用者執行指令尋找路?剑?脚c路?介g用:格開。
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
*PS1 設定主要提示符號
*PS2 設定次要提示符號
*PWD 目前工作目錄
*SHELL 所使用的shell
*TERM 定義終端機型式(linux 或 vt100)
*MAIL 定義存放郵件的檔
二、設定環境變數
1.顯示環境變數
[guo@amigo guo]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
[guo@amigo guo]$ echo $PS1
[\u@\h \W]\$
[guo@amigo guo]$ echo $SHELL
/bin/bash
[guo@amigo guo]$
2.改變環境變數
*指定變數值
環境變數=變數值
[guo@amigo guo]$echo $PS1
[\u@\h \W]\$
[guo@amigo guo]$PS1="Linux> " (單引號或雙引號都可以)
Linux> echo $PS1
Linux>
Linux> PS1='[\u@\h \W]\$'
[guo@amigo guo]$
*改變路?皆O定
[guo@amigo guo]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin
[guo@amigo guo]$PATH="$PATH:." (只能使用雙引號)
[guo@amigo guo]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
[guo@amigo guo]$
三、環境變數的設定檔
上述環境變數的設定只是暫時的,一旦logout系統,環境變數又會回到先前之設定,要讓環境變數設定每次進入系統都生效,就必須修改環境變數的設定檔。環境變數的設定分系統環境變數的設定與個人環境變數的設定兩種。
1.系統環境變數設定
系統環境變數設定檔為/etc/profile及/etc/bashrc兩個檔案,所有使用者登入都會把這兩個檔案的環境變數設定加入自己環境中,一般的環境變數設定。
[guo@amigo guo]$ cat /etc/profile|more
# /etc/profile
# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc
PATH="$PATH:/usr/X11R6/bin"
ulimit -c 1000000
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
umask 002
else
umask 022
fi
USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -x $i ]; then
. $i
fi
done
unset i
[guo@amigo guo]$
[guo@amigo guo]$ cat /etc/bashrc|more
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# are we an interactive shell?
if [ "$PS1" ]; then
if [ "x`tput kbs`" != "x" ]; then # We can't do this with "dumb" terminal
stty erase `tput kbs`
fi
case $TERM in
xterm*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
;;
*)
;;
esac
PS1="[\u@\h \W]\\$ "
if [ "x$SHLVL" != "x1" ]; then # We're not a login shell
for i in /etc/profile.d/*.sh; do
if [ -x $i ]; then
. $i
fi
done
fi
fi
[guo@amigo guo]$
2.個人環境變數設定
個人環境變數設定檔為~/.bashrc及~/.bash_profile兩個檔案,所
[guo@amigo guo]$more .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[guo@amigo guo]$more .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:.
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASH_ENV PATH
[guo@amigo guo]$
參、shell功能
一、輸入處理
shell的重要工作就是處理使用者?逆I盤的輸入。使用者?逆I盤輸入的字元,在按下Enter鍵後,shell都會先行分析、解釋。使用者?逆I盤的輸入可能包括指令、指令群、shell變數、I/O導向、萬用字元等,shell都會先行展開各部分,再一一分析內容,最後執行該指令。
1.指令解析
指令可分為二種,一種為Linux指令,如/bin、/usr/sbin下指令,另一種為shell內建指令,如cd、jobs、set等,?K沒有單獨檔案存在。
Linux指令或shell內建指令,都有相同的指令格式:
指令 [-選項] [--選項] [參數]
ls --help
ls -la --color
2.使用多指令
指令1;指令2;指令3;….
[guo@amigo guo]$ls;who;date
Desktop cal2 mtools-3.9.6-3.i386.rpm
Mail cal3 pdadduser-1.2
a.c cc pdadduser-1.2.tar.gz
a.out export-listserv pdadduser-1_2_tar.tar
aa file1 perl
addUsers.zip gmenu-0_1-3_i386.rpm qe-0_0_34-1_i386.rpm
apache_1.3.12 listserv_tar.Z qe-0_0_34_tar.tar
apache_1_3_12_tar.gz ls1 shell
apache_2_0a4_tar.gz ls2 sort1
b.tar ls3 test
bb ls4 ztelnet-linux.tar.gz
cal1 lszip.zip
guo pts/0 Jul 5 10:46
Wed Jul 5 14:27:51 CST 2000
[guo@amigo guo]$
3.指令替代
指令替代就是直接將指令B執行的結果取代指令A的參數?韴绦兄噶預。格式如下:
指令A `指令B`
指令B要放在反引號「`」裡,請注意反引號「`」跟單引號「'」的差別,他們在功能上是不同的。
[guo@amigo guo]$echo The precise time now is `date`
The precise time now is Wed Jul 5 14:39:55 CST 2000
[guo@amigo guo]$
4.指令群組
使用者可以一次輸入許多指令?韴绦校敹嘀噶顖绦械慕Y果要以導向或管線?砝脮r,就需要以{}將多指令包成指令群組。
{ 指令1;指令2;指令3;…. }
注意:兩個{}與指令之間要空格
[guo@amigo guo]$ who;date | sort
guo pts/0 Jul 5 10:46
Wed Jul 5 14:59:51 CST 2000
[guo@amigo guo]$ date;who | sort
Wed Jul 5 15:00:05 CST 2000
guo pts/0 Jul 5 10:46
[guo@amigo guo]${ who;date }
guo pts/0 Jul 5 10:46
Wed Jul 5 14:58:44 CST 2000
[guo@amigo guo]${ who;date } | sort
Wed Jul 5 14:58:48 CST 2000
guo pts/0 Jul 5 10:46
[guo@amigo guo]$
5.子shell (subshell)
subshell即為在login shell下,再開一個shell?韴绦兄噶睿锰幨窃趕ubshell中對環境及變數的改變不會影響原?韘hell的設定。subshell的執行方式是把指令放在( )內執行。指令格式:
( 指令1;指令2;指令 )
[guo@amigo guo]$X='Hello!';echo $X
Hello!
[guo@amigo guo]$(X='BYE!';echo $X);echo $X
BYE!
Hello!
[guo@amigo guo]$
6.特殊字元
a.#註解。凡是以#開頭輸入文字都不會被執行。
b.`單引號。在單引號'中間的字元都會被當作文字處理,指令、檔案、特殊字元都將不再有原?淼囊饬x。
[guo@amigo guo]$X='Hello!';echo $X
Hello!
[guo@amigo guo]$echo 'The value of $X is' $X
The value of $X is Hello!
[guo@amigo guo]$
c."與單引號'差不多,不過在雙引號"內的$及`保留變數替代及指令替代功能。
[guo@amigo guo]$echo "$X"
Hello!
[guo@amigo guo]$echo '$X'
$X
[guo@amigo guo]$echo "$X `date`"
Hello! Wed Jul 5 15:27:01 CST 2000
[guo@amigo guo]$
d.\ 脫離字元,讓特殊字元功能失效,變成文字字元使用。
[guo@amigo guo]$ls y.*
y.* y.1 y.2
[guo@amigo guo]$ls y.\*
y.*
[guo@amigo guo]$
e.& 背景執行
f.$ 變數質替代
g.< 輸入導向
h.> 輸出導向
i.| 管線
j.! 執行指令記錄history裡的指令
k.; 分格指令
l.{ } 指令群組
m.( ) 開啟subshell
n.` ` 指令替代
o.萬用字元 * ? . .. [ ] doooom 03-02-07, 02:59 二、指令功能
1.別名-alias
alias 查看別名清單
alias 別名='指令敘述' 設定別名
[guo@amigo guo]$alias
alias cp='cp -i'
alias l.='ls .[a-zA-Z]* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
[guo@amigo guo]$alias copy='cp'
[guo@amigo guo]$alias
alias copy='cp'
alias cp='cp -i'
alias l.='ls .[a-zA-Z]* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
[guo@amigo guo]$
2.指令記錄(history)
[guo@amigo guo]$history|more
220 ls -l
221 cd /var
222 ls
223 ls -l
[guo@amigo guo]$!220
[guo@amigo guo]$!!
3.自動完成指令
his Tab
[guo@amigo guo]$history
三、輸出/輸入(I/O)導向(Redirection)
在Linux系統中每一個程式(process),都會有輸出、輸入及錯誤輸出三個通道(channel),分別為標準輸入(stdin)、標準輸出(stdout)及標準錯誤輸出(stderr)。導向的功能主要在於控制輸出、輸入及錯誤輸出檔案,可隨意變更標準輸入(stdin)、標準輸出(stdout)及標準錯誤輸出(stderr)檔案。
[guo@amigo shell]$ls
argument bash case2 catall doctotxt fordo hello1 read
backup case1 case3 checkf exit1 hello listbin txttodoc
[guo@amigo shell]$ls >yy
[guo@amigo shell]$
1.導向控制
a.指令< 檔案
mail guo < file
b.指令>檔案
ls > yy
c.指令>>檔案
date>>yy
d.指令A|指令B
ls|more
ls|sort>file
四、工作控制功能(Jobs Control)
1.工作與行程
info make
Ctrl+Z
vi test
Ctrl+Z
mail guo
Ctrl+Z
jobs
ps
2.前景與背景
ls (前景處理)
ls& (背景處理)
3.顯示工作
jobs
4.控制工作
指定工作
%編號
%字串
%%
%-
例如:
fg %1
bg %2
kill %1
肆、shell script撰寫
一、建立與執行shell script
1.建立一個shell script檔
vi hello (內容如下)
[guo@amigo shell]$ more hello
#!/bin/sh
# Filename : hello
echo "Hello world!"
a.編寫一個shell script檔內容
b.chmod 755 hello
2.執行shell script
a. ./hello
b.bash hello
c.source hello
d. . hello (root才能使用)
二、變數
1.設定變數
a.直接設定
格式:變數=值
x=hello
b.使用read指令
echo 'What is your name ?'
read name
echo 'Hello! '$name
c.指令取代
y=`date`
echo $y
d.指令參數
格式:指令 參數1 參數2 參數3….
[guo@amigo shell]$ more argument
#!/bin/sh
# Filename : argument
echo 'argument1 is '$1
echo "argument2 is "$2
echo "argument3 is "$3
[guo@amigo shell]$ ./argument AA BB CC
argument1 is AA
argument2 is BB
argument3 is CC
2.變數的使用
$變數名稱
echo $x
3.變數宣告後其他 subshell也可以使用該變數
格式:export 變數名稱
export x
三、控制結構
test的使用(參考範例一、二)
case .. esac的使用(參考範例三)
if .. then .. fi的使用(參考範例四、五)
for .. in .. do .. done的使用(參考範例六)
while .. do .. done的使用(參考範例七、八)
until .. do .. done的使用(參考範例九)
參考範例一
[guo@amigo shell]$ test b = a
[guo@amigo shell]$ echo $?
1
[guo@amigo shell]$ test b = b
[guo@amigo shell]$ echo $?
0
參考範例二
[guo@amigo shell]$ [ b = a ]
[guo@amigo shell]$ echo $?
1
[guo@amigo shell]$ [ b = b ]
[guo@amigo shell]$ echo $?
0
參考範例三
[guo@amigo shell]$ more case1
#!/bin/sh
# Filename : case1
case $1 in
start | begin)
echo "start somthing"
;;
stop | end)
echo "stop somthing"
;;
*)
echo "nothing"
;;
esac
參考範例四
[guo@amigo shell]$ more ifthen
#!/bin/sh
# Filename : ifthen
echo "Are you O.K.(y/n)?"
read answer
if [ "$answer" = Y -o "$answer" = y ]
then
echo "Glad to hear it."
fi
參考範例五
[guo@amigo shell]$ more ifthenelse
#!/bin/sh
# Filename : ifthen
echo "Are you O.K.(y/n)?"
read answer
if [ "$answer" = Y -o "$answer" = y ]
then
echo "Glad to hear it."
else
echo "I am sorry."
fi
參考範例六
[guo@amigo shell]$ more doctotxt
#!/bin/sh
# Filename : doctotxt
FILES=`ls /home/guo/test/*.doc`
for doc in $FILES
do
txt=`echo $doc | sed "s/.doc/.txt/"`
mv $doc $txt
done
參考範例七
[guo@amigo shell]$ more while1
#!/bin/sh
num=0
while [ $num -lt 10 ]
do
echo $num
num=`expr $num + 1 `
done
echo "while end"
參考範例八
[guo@amigo shell]$ more while2
#!/bin/sh
echo "Guess a number,Please input a number :"
read num
while [ "$num" != "7" ]
do
echo "Wrong try again!"
read num
done
echo You got it!
參考範例九
[guo@amigo shell]$ more until1
#!/bin/sh
num=0
until [ $num -gt 10 ]
do
echo $num
num=`expr $num + 1 `
done
echo "until end"
JOE 編輯器
一. 概述
JOE 是一種全螢幕的編輯器,它是由 Joseph H. Allen 撰寫出?,可用?
編輯程式檔案及一般文字檔案。如果您需要 help , 請按 Ctrl-K-H 後, 會在
Windows 最後一行出現 Basic Windows Advanced Options Search Names
Joe 等文字, cursor 停留在 Basic 上, 您可以使用左右鍵選您要 help 的項,
再 Return 即可,取消 help 請再按一次 Ctrl-K-H 後即消失。(以下內容所有
Ctrl 鍵,將以 ^ 符號代替,如 Ctrl-K-H 將以 ^KH 取代之)
二. 啟動 JOE
%joe
或
%joe filename
三. JOE 指令集
1. 游標控制指令
^B 往左移一個字元(char) ^F 往右移一個字元
^Z 往左移一個字(word) ^X 往右移一個字
^P 往上移一行 ^N 往下移一行
^A 游標移至行首 ^E 游標移至行尾
^U 往上移一頁 ^V 往下移一頁
^KU 游標移至檔首 ^KV 游標移至檔尾
^KL 游標移至某行
2. 刪除指令
^D 刪除游標所在的字元 ^Y 刪除游標所在的行
^O 往左刪除一個字(word) ^W 往右移珊除一個字
^J 刪除?挠螛怂谧衷列形
^- undo ^^ redo
3. 區塊指令
^KB 定址區塊起始點 ^KK 定址區塊終止點
^KC 區塊拷? ^KM 區塊般移
^KW 區塊儲存 ^KY 區塊刪除
4. 搜尋和取代指令
^KF 尋找字串
說明:在螢幕最下面會有一行,提示您輸入欲尋找的字串
Search string (^C to abort):define
按<return>後,提示畫面如下:
(I)gnore case (B)ackwards (R)eplace n (^C to abort):
可輸入 I 或 B 或 R
I: 忽略大小寫
B: ?挠螛怂谖恢猛皩ふ
R: 將出現另一提示畫面要求輸入欲取代之字串
^L 繼續尋找前一次尋找之字串
5. 有關 Window 的指令
^KO 分割畫面(把一個畫面分割兩成二個畫面)
^KI 顯示一個視窗或全部視窗
^KP 將游標移至上一個視窗 ^KN 將游標移至下一個視窗
^KT 將游標所在的視窗範圍縮小 ^KG 將游標所在的視窗範圍放大
6. 讀取檔案的指令
^KE 讀取檔案
^KR 讀取一檔案,存入目前開啟之檔案,游標所在行之後
7. 存檔與離開 JOE 的指令
^KX 存檔且離開 JOE
^KD 存檔但仍在 JOE 狀態下
^C 不儲存被修改之檔案,直接離開 JOE
8. 其它的指令
^TT Insert/Overtype
^TA Autoindent on/off
^TL 設定左邊界
^TR 設定右邊界
^TP 設定 PgUp/PgDn 的行數
^TD 設定 TAB 的長度
^KA 使整行文字向中對齊
^KZ 暫時離開 JOE 到 UNIX 系統下,欲回到 JOE,請輸入 fg
^K, 整個區塊(block)或段落(paragraph)向左移一個 bype
^K. 整個區塊(block)或段落(paragraph)向右移一個 bype
^KO 執行 UNIX 指令
BASH環境介紹 日期:89/7/10
講師:郭錦賢
壹、認識shell
一、shell發展與角色
1960年代,unix系統剛發展出?頃r,需要一個完整的使用者與作業系統溝通的介面。第一個出現的shell為AT&T S.R. Bourne 所發展的Bourne shell,也就是sh。以後又有Korn shell (ksh),BSD C shell (csh),Enhanced C shell (tcsh),等等,Linux預設使用shell為Bourne Again shell (bash),bash是根據sh發展出?恚瑫r具有csh及ksh的優點。
shell本身是一個可執行的程式,它是使用者進入系統後,第一個執行的程式,它介於使用者與kernel之間,它幫使用者解譯指令,是使用者與機器之間的介面,主要工作是提供使用者一個良好的使用環境,讓使用者易於使用系統。
二、各種shell
1.sh --Bourne shell,最早的shell,在Linux中/bin/sh是一個符號連結到/bin/bash。
2.ash --ash是Small Bourne shell。是Linux裡最小的shell,內鍵功能也最少。執行檔為/bin/ash。
3.ksh --Korn shell由sh發展而?恚琸sh缺乏工作控制指令。執行檔為/bin/ksh。
4.csh --C shell語法與C很像,提供指令編輯、指令記錄,指令自動完成功能,在Linux中/bin/csh是一個符號連結到/bin/tcsh。
5.tcsh --Enhanced C shell,是csh的加?姲妗绦袡n為/bin/tcsh。
6.bash --Bourne Again shell擁有csh及ksh的特色,也供指令編輯、指令記錄,指令自動完成功能。執行檔為/bin/bash。
7.zsh --Linux中最大的shell之一,功能也很?姟绦袡n為/bin/zsh。
三、進入shell
*檢視shell
echo $SHELL
cat /etc/shells 使用者所使用的shell,除了有執行檔之外,也須列於/etc/shell檔案中。
*變更shell
chsh
*提示符號(prompt)
shell 提示符號
bash [\u@\h \W]\$
tcsh [%n@%m %c]$
ash $
ksh [\u@\h \W]\$
zsh \h%
四、使用不同的shell
[guo@amigo guo]$ tcsh
[guo@amigo ~]$
[guo@amigo ~]$ exit
exit
[guo@amigo guo]$ ash
$ exit
[guo@amigo guo]$
貳、環境設定
所謂環境指的就是各項shell下的控制及設定,包括終端機型式、檔案搜尋路?健⑹褂谜吣夸洝⑾到y提示符號等等。有關環境的控制都是透過環境變數?碓O定,每一個環境變數控制一項設定。
[guo@amigo guo]$ env|more
LESSOPEN=|/usr/bin/lesspipe.sh %s
USERNAME=
HISTSIZE=1000
HOSTNAME=amigo
LOGNAME=guo
REMOTEHOST=140.123.3.56
MAIL=/var/spool/mail/guo
TERM=vt100
HOSTTYPE=i386
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
KDEDIR=/usr
HOME=/home/guo
INPUTRC=/etc/inputrc
SHELL=/bin/bash
USER=guo
BASH_ENV=/home/guo/.bashrc
QTDIR=/usr/lib/qt-2.1.0
LANG=en_US
OSTYPE=Linux
*環境變數表示法:
$環境變數
[guo@amigo /]$ cd $HOME
[guo@amigo guo]$
一、檢視環境變數
[guo@amigo guo]$ env|more
[guo@amigo guo]$ set|more
*HOME 使用者家目錄
*LOGNAME 使用者帳號名稱
*PATH 使用者執行指令尋找路?剑?脚c路?介g用:格開。
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
*PS1 設定主要提示符號
*PS2 設定次要提示符號
*PWD 目前工作目錄
*SHELL 所使用的shell
*TERM 定義終端機型式(linux 或 vt100)
*MAIL 定義存放郵件的檔
二、設定環境變數
1.顯示環境變數
[guo@amigo guo]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
[guo@amigo guo]$ echo $PS1
[\u@\h \W]\$
[guo@amigo guo]$ echo $SHELL
/bin/bash
[guo@amigo guo]$
2.改變環境變數
*指定變數值
環境變數=變數值
[guo@amigo guo]$echo $PS1
[\u@\h \W]\$
[guo@amigo guo]$PS1="Linux> " (單引號或雙引號都可以)
Linux> echo $PS1
Linux>
Linux> PS1='[\u@\h \W]\$'
[guo@amigo guo]$
*改變路?皆O定
[guo@amigo guo]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin
[guo@amigo guo]$PATH="$PATH:." (只能使用雙引號)
[guo@amigo guo]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/guo/bin:.
[guo@amigo guo]$
三、環境變數的設定檔
上述環境變數的設定只是暫時的,一旦logout系統,環境變數又會回到先前之設定,要讓環境變數設定每次進入系統都生效,就必須修改環境變數的設定檔。環境變數的設定分系統環境變數的設定與個人環境變數的設定兩種。
1.系統環境變數設定
系統環境變數設定檔為/etc/profile及/etc/bashrc兩個檔案,所有使用者登入都會把這兩個檔案的環境變數設定加入自己環境中,一般的環境變數設定。
[guo@amigo guo]$ cat /etc/profile|more
# /etc/profile
# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc
PATH="$PATH:/usr/X11R6/bin"
ulimit -c 1000000
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
umask 002
else
umask 022
fi
USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -x $i ]; then
. $i
fi
done
unset i
[guo@amigo guo]$
[guo@amigo guo]$ cat /etc/bashrc|more
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# are we an interactive shell?
if [ "$PS1" ]; then
if [ "x`tput kbs`" != "x" ]; then # We can't do this with "dumb" terminal
stty erase `tput kbs`
fi
case $TERM in
xterm*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
;;
*)
;;
esac
PS1="[\u@\h \W]\\$ "
if [ "x$SHLVL" != "x1" ]; then # We're not a login shell
for i in /etc/profile.d/*.sh; do
if [ -x $i ]; then
. $i
fi
done
fi
fi
[guo@amigo guo]$
2.個人環境變數設定
個人環境變數設定檔為~/.bashrc及~/.bash_profile兩個檔案,所
[guo@amigo guo]$more .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[guo@amigo guo]$more .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:.
BASH_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASH_ENV PATH
[guo@amigo guo]$
參、shell功能
一、輸入處理
shell的重要工作就是處理使用者?逆I盤的輸入。使用者?逆I盤輸入的字元,在按下Enter鍵後,shell都會先行分析、解釋。使用者?逆I盤的輸入可能包括指令、指令群、shell變數、I/O導向、萬用字元等,shell都會先行展開各部分,再一一分析內容,最後執行該指令。
1.指令解析
指令可分為二種,一種為Linux指令,如/bin、/usr/sbin下指令,另一種為shell內建指令,如cd、jobs、set等,?K沒有單獨檔案存在。
Linux指令或shell內建指令,都有相同的指令格式:
指令 [-選項] [--選項] [參數]
ls --help
ls -la --color
2.使用多指令
指令1;指令2;指令3;….
[guo@amigo guo]$ls;who;date
Desktop cal2 mtools-3.9.6-3.i386.rpm
Mail cal3 pdadduser-1.2
a.c cc pdadduser-1.2.tar.gz
a.out export-listserv pdadduser-1_2_tar.tar
aa file1 perl
addUsers.zip gmenu-0_1-3_i386.rpm qe-0_0_34-1_i386.rpm
apache_1.3.12 listserv_tar.Z qe-0_0_34_tar.tar
apache_1_3_12_tar.gz ls1 shell
apache_2_0a4_tar.gz ls2 sort1
b.tar ls3 test
bb ls4 ztelnet-linux.tar.gz
cal1 lszip.zip
guo pts/0 Jul 5 10:46
Wed Jul 5 14:27:51 CST 2000
[guo@amigo guo]$
3.指令替代
指令替代就是直接將指令B執行的結果取代指令A的參數?韴绦兄噶預。格式如下:
指令A `指令B`
指令B要放在反引號「`」裡,請注意反引號「`」跟單引號「'」的差別,他們在功能上是不同的。
[guo@amigo guo]$echo The precise time now is `date`
The precise time now is Wed Jul 5 14:39:55 CST 2000
[guo@amigo guo]$
4.指令群組
使用者可以一次輸入許多指令?韴绦校敹嘀噶顖绦械慕Y果要以導向或管線?砝脮r,就需要以{}將多指令包成指令群組。
{ 指令1;指令2;指令3;…. }
注意:兩個{}與指令之間要空格
[guo@amigo guo]$ who;date | sort
guo pts/0 Jul 5 10:46
Wed Jul 5 14:59:51 CST 2000
[guo@amigo guo]$ date;who | sort
Wed Jul 5 15:00:05 CST 2000
guo pts/0 Jul 5 10:46
[guo@amigo guo]${ who;date }
guo pts/0 Jul 5 10:46
Wed Jul 5 14:58:44 CST 2000
[guo@amigo guo]${ who;date } | sort
Wed Jul 5 14:58:48 CST 2000
guo pts/0 Jul 5 10:46
[guo@amigo guo]$
5.子shell (subshell)
subshell即為在login shell下,再開一個shell?韴绦兄噶睿锰幨窃趕ubshell中對環境及變數的改變不會影響原?韘hell的設定。subshell的執行方式是把指令放在( )內執行。指令格式:
( 指令1;指令2;指令 )
[guo@amigo guo]$X='Hello!';echo $X
Hello!
[guo@amigo guo]$(X='BYE!';echo $X);echo $X
BYE!
Hello!
[guo@amigo guo]$
6.特殊字元
a.#註解。凡是以#開頭輸入文字都不會被執行。
b.`單引號。在單引號'中間的字元都會被當作文字處理,指令、檔案、特殊字元都將不再有原?淼囊饬x。
[guo@amigo guo]$X='Hello!';echo $X
Hello!
[guo@amigo guo]$echo 'The value of $X is' $X
The value of $X is Hello!
[guo@amigo guo]$
c."與單引號'差不多,不過在雙引號"內的$及`保留變數替代及指令替代功能。
[guo@amigo guo]$echo "$X"
Hello!
[guo@amigo guo]$echo '$X'
$X
[guo@amigo guo]$echo "$X `date`"
Hello! Wed Jul 5 15:27:01 CST 2000
[guo@amigo guo]$
d.\ 脫離字元,讓特殊字元功能失效,變成文字字元使用。
[guo@amigo guo]$ls y.*
y.* y.1 y.2
[guo@amigo guo]$ls y.\*
y.*
[guo@amigo guo]$
e.& 背景執行
f.$ 變數質替代
g.< 輸入導向
h.> 輸出導向
i.| 管線
j.! 執行指令記錄history裡的指令
k.; 分格指令
l.{ } 指令群組
m.( ) 開啟subshell
n.` ` 指令替代
o.萬用字元 * ? . .. [ ] doooom 03-02-07, 02:59 二、指令功能
1.別名-alias
alias 查看別名清單
alias 別名='指令敘述' 設定別名
[guo@amigo guo]$alias
alias cp='cp -i'
alias l.='ls .[a-zA-Z]* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
[guo@amigo guo]$alias copy='cp'
[guo@amigo guo]$alias
alias copy='cp'
alias cp='cp -i'
alias l.='ls .[a-zA-Z]* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
[guo@amigo guo]$
2.指令記錄(history)
[guo@amigo guo]$history|more
220 ls -l
221 cd /var
222 ls
223 ls -l
[guo@amigo guo]$!220
[guo@amigo guo]$!!
3.自動完成指令
his Tab
[guo@amigo guo]$history
三、輸出/輸入(I/O)導向(Redirection)
在Linux系統中每一個程式(process),都會有輸出、輸入及錯誤輸出三個通道(channel),分別為標準輸入(stdin)、標準輸出(stdout)及標準錯誤輸出(stderr)。導向的功能主要在於控制輸出、輸入及錯誤輸出檔案,可隨意變更標準輸入(stdin)、標準輸出(stdout)及標準錯誤輸出(stderr)檔案。
[guo@amigo shell]$ls
argument bash case2 catall doctotxt fordo hello1 read
backup case1 case3 checkf exit1 hello listbin txttodoc
[guo@amigo shell]$ls >yy
[guo@amigo shell]$
1.導向控制
a.指令< 檔案
mail guo < file
b.指令>檔案
ls > yy
c.指令>>檔案
date>>yy
d.指令A|指令B
ls|more
ls|sort>file
四、工作控制功能(Jobs Control)
1.工作與行程
info make
Ctrl+Z
vi test
Ctrl+Z
mail guo
Ctrl+Z
jobs
ps
2.前景與背景
ls (前景處理)
ls& (背景處理)
3.顯示工作
jobs
4.控制工作
指定工作
%編號
%字串
%%
%-
例如:
fg %1
bg %2
kill %1
肆、shell script撰寫
一、建立與執行shell script
1.建立一個shell script檔
vi hello (內容如下)
[guo@amigo shell]$ more hello
#!/bin/sh
# Filename : hello
echo "Hello world!"
a.編寫一個shell script檔內容
b.chmod 755 hello
2.執行shell script
a. ./hello
b.bash hello
c.source hello
d. . hello (root才能使用)
二、變數
1.設定變數
a.直接設定
格式:變數=值
x=hello
b.使用read指令
echo 'What is your name ?'
read name
echo 'Hello! '$name
c.指令取代
y=`date`
echo $y
d.指令參數
格式:指令 參數1 參數2 參數3….
[guo@amigo shell]$ more argument
#!/bin/sh
# Filename : argument
echo 'argument1 is '$1
echo "argument2 is "$2
echo "argument3 is "$3
[guo@amigo shell]$ ./argument AA BB CC
argument1 is AA
argument2 is BB
argument3 is CC
2.變數的使用
$變數名稱
echo $x
3.變數宣告後其他 subshell也可以使用該變數
格式:export 變數名稱
export x
三、控制結構
test的使用(參考範例一、二)
case .. esac的使用(參考範例三)
if .. then .. fi的使用(參考範例四、五)
for .. in .. do .. done的使用(參考範例六)
while .. do .. done的使用(參考範例七、八)
until .. do .. done的使用(參考範例九)
參考範例一
[guo@amigo shell]$ test b = a
[guo@amigo shell]$ echo $?
1
[guo@amigo shell]$ test b = b
[guo@amigo shell]$ echo $?
0
參考範例二
[guo@amigo shell]$ [ b = a ]
[guo@amigo shell]$ echo $?
1
[guo@amigo shell]$ [ b = b ]
[guo@amigo shell]$ echo $?
0
參考範例三
[guo@amigo shell]$ more case1
#!/bin/sh
# Filename : case1
case $1 in
start | begin)
echo "start somthing"
;;
stop | end)
echo "stop somthing"
;;
*)
echo "nothing"
;;
esac
參考範例四
[guo@amigo shell]$ more ifthen
#!/bin/sh
# Filename : ifthen
echo "Are you O.K.(y/n)?"
read answer
if [ "$answer" = Y -o "$answer" = y ]
then
echo "Glad to hear it."
fi
參考範例五
[guo@amigo shell]$ more ifthenelse
#!/bin/sh
# Filename : ifthen
echo "Are you O.K.(y/n)?"
read answer
if [ "$answer" = Y -o "$answer" = y ]
then
echo "Glad to hear it."
else
echo "I am sorry."
fi
參考範例六
[guo@amigo shell]$ more doctotxt
#!/bin/sh
# Filename : doctotxt
FILES=`ls /home/guo/test/*.doc`
for doc in $FILES
do
txt=`echo $doc | sed "s/.doc/.txt/"`
mv $doc $txt
done
參考範例七
[guo@amigo shell]$ more while1
#!/bin/sh
num=0
while [ $num -lt 10 ]
do
echo $num
num=`expr $num + 1 `
done
echo "while end"
參考範例八
[guo@amigo shell]$ more while2
#!/bin/sh
echo "Guess a number,Please input a number :"
read num
while [ "$num" != "7" ]
do
echo "Wrong try again!"
read num
done
echo You got it!
參考範例九
[guo@amigo shell]$ more until1
#!/bin/sh
num=0
until [ $num -gt 10 ]
do
echo $num
num=`expr $num + 1 `
done
echo "until end"
JOE 編輯器
一. 概述
JOE 是一種全螢幕的編輯器,它是由 Joseph H. Allen 撰寫出?,可用?
編輯程式檔案及一般文字檔案。如果您需要 help , 請按 Ctrl-K-H 後, 會在
Windows 最後一行出現 Basic Windows Advanced Options Search Names
Joe 等文字, cursor 停留在 Basic 上, 您可以使用左右鍵選您要 help 的項,
再 Return 即可,取消 help 請再按一次 Ctrl-K-H 後即消失。(以下內容所有
Ctrl 鍵,將以 ^ 符號代替,如 Ctrl-K-H 將以 ^KH 取代之)
二. 啟動 JOE
%joe
或
%joe filename
三. JOE 指令集
1. 游標控制指令
^B 往左移一個字元(char) ^F 往右移一個字元
^Z 往左移一個字(word) ^X 往右移一個字
^P 往上移一行 ^N 往下移一行
^A 游標移至行首 ^E 游標移至行尾
^U 往上移一頁 ^V 往下移一頁
^KU 游標移至檔首 ^KV 游標移至檔尾
^KL 游標移至某行
2. 刪除指令
^D 刪除游標所在的字元 ^Y 刪除游標所在的行
^O 往左刪除一個字(word) ^W 往右移珊除一個字
^J 刪除?挠螛怂谧衷列形
^- undo ^^ redo
3. 區塊指令
^KB 定址區塊起始點 ^KK 定址區塊終止點
^KC 區塊拷? ^KM 區塊般移
^KW 區塊儲存 ^KY 區塊刪除
4. 搜尋和取代指令
^KF 尋找字串
說明:在螢幕最下面會有一行,提示您輸入欲尋找的字串
Search string (^C to abort):define
按<return>後,提示畫面如下:
(I)gnore case (B)ackwards (R)eplace n (^C to abort):
可輸入 I 或 B 或 R
I: 忽略大小寫
B: ?挠螛怂谖恢猛皩ふ
R: 將出現另一提示畫面要求輸入欲取代之字串
^L 繼續尋找前一次尋找之字串
5. 有關 Window 的指令
^KO 分割畫面(把一個畫面分割兩成二個畫面)
^KI 顯示一個視窗或全部視窗
^KP 將游標移至上一個視窗 ^KN 將游標移至下一個視窗
^KT 將游標所在的視窗範圍縮小 ^KG 將游標所在的視窗範圍放大
6. 讀取檔案的指令
^KE 讀取檔案
^KR 讀取一檔案,存入目前開啟之檔案,游標所在行之後
7. 存檔與離開 JOE 的指令
^KX 存檔且離開 JOE
^KD 存檔但仍在 JOE 狀態下
^C 不儲存被修改之檔案,直接離開 JOE
8. 其它的指令
^TT Insert/Overtype
^TA Autoindent on/off
^TL 設定左邊界
^TR 設定右邊界
^TP 設定 PgUp/PgDn 的行數
^TD 設定 TAB 的長度
^KA 使整行文字向中對齊
^KZ 暫時離開 JOE 到 UNIX 系統下,欲回到 JOE,請輸入 fg
^K, 整個區塊(block)或段落(paragraph)向左移一個 bype
^K. 整個區塊(block)或段落(paragraph)向右移一個 bype
^KO 執行 UNIX 指令
相关阅读 更多 +