文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>BASH環境介紹

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 指令
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载