国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Bourne Shell之Shell基礎知識

2024-08-27 23:57:48
字體:
來源:轉載
供稿:網友

建議:man sh 查看相關UNIX上的改進或特性

(1)shell提示符及其環(huán)境

在passwd文件中可以看到每個用戶登陸后使用的shell,下面兩個文件也是這個意思。

/etc/passwd文件   

提示符:$

/etc/profile $HOME/.profile

(2)shell執(zhí)行選項

在建立一個shell腳本后我們要用sh命令來運行和測試,下面是一些sh常用的參數(shù)

-n 測試shell script語法結構,只讀取shell script但不執(zhí)行

-x 進入跟蹤方式,顯示所執(zhí)行的每一條命令,用于調度

-a Tag all variables for export

-c "string" 從strings中讀取命令

-e 非交互方式

-f 關閉shell文件名產生功能

-h locate and remember functions as defind

-i 交互方式

-k 從環(huán)境變量中讀取命令的參數(shù)

-r 限制方式

-s 從標準輸入讀取命令

-t 執(zhí)行命令后退出(shell exits)

-u 在替換中如使用未定義變量為錯誤

-v verbose,顯示shell輸入行

這些選項可以聯(lián)合使用,但有些顯然相互沖突,如-e和-i.

(3)受限制shell(Restircted Shell)

說了半天好象這個東西沒什么用,那就不管了。

sh -r 或 /bin/rsh

不能執(zhí)行如下操作:cd, 更改PATH,指定全路徑名,輸出重定向,因此可以提供一個較好的控制和安全機制。通常rsh用于應用型用戶及撥號用戶,這些用戶通常是看不到提示符的。通常受限制用戶的主目錄是不可寫的。

不足:如果用戶可以調用sh,則rsh的限制將不在起作用,事實上如果用戶在vi及more程序中調用shell,而這時rsh的限制將不再起作用。

(4)用set改變 shell選項

實際上就是設置sh的默認參數(shù),我們在運行shell腳本時,并不總是使用sh scriptsfile,而是用./scriptsfile來運行,這個時候就使用sh的默認參數(shù),用戶可以在$提示符下用set命令來設置或取消shell的選項,使用-設置選項,+取消相應選項,大多數(shù)UNIX系統(tǒng)允許a,e,f,h,k,n,u,v和x的開關設置/取消。

set -xv

啟動跟蹤方式;顯示所有的命令及替換,同樣顯示輸入。

set -tu

關閉在替換時對未定義變量的檢查。

使用echo $-顯示所有已設置的shell選項。

(5)用戶啟動文件 .profile

PATH=$PATH:/usr/loacl/bin; export PATH

(6)shell環(huán)境變量

這里是舉例說明什么是環(huán)境變量,但還是沒說什么是環(huán)境變量,按我的理解,環(huán)境變量類似于宏定義,或者說環(huán)境變量是一個作用于系統(tǒng)的全局變量或局部變量。

CDPATH 用于cd命令的查找路徑

HOME /etc/passwd文件中列出的用戶主目錄

IFS Internal Field Separator,默認為空格,tab及換行符

MAIL /var/mail/$USERNAME mail等程序使用

PATH

PS1,PS2 默認提示符($)及換行提示符(>)

TERM 終端類型,常用的有vt100,ansi,vt200,xterm等

示例:$PS1="test:";export PS1

test: PS1="$";export PS1

$echo $MAIL

/var/mail/username

(7)保留字符及其含義

$ shell變量名的開始,如$var

| 管道,將標準輸出轉到下一個命令的標準輸入

# 注釋開始

& 在后臺執(zhí)行一個進程

? 匹配一個字符

* 匹配0到多個字符(與DOS不同,可在文件名中間使用,并且含.)

$- 使用set及執(zhí)行時傳遞給shell的標志位

$! 最后一個子進程的進程號

$# 傳遞給shell script的參數(shù)個數(shù)

$* 傳遞給shell script的參數(shù)

$@ 所有參數(shù),個別的用雙引號括起來

$? 上一個命令的返回代碼

當前shell的名字

$n (n:1-) 位置參數(shù)

$$ 進程標識號(Process Identifier Number, PID)

覆蓋現(xiàn)有文件的數(shù)據(jù)

>file 輸出重定向

這個沒看明白

`command` 命令替換,如 filename=`basename /usr/local/bin/tcsh`

會在現(xiàn)有文件末尾追加數(shù)據(jù)

>>fiile 輸出重定向,append

轉義符及單引號:

注意單引號,雙引號,沒引號的異同。

  1. $echo "$HOME $PATH" 
  2. /home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: 
  3. $echo '$HOME $PATH' 
  4. $HOME $PATH 
  5. $echo $HOME $PATH 
  6. $HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbwork/bin 

其他:

  1. $dir=ls 
  2. $$dir 
  3. $alias dir ls 
  4. $dir 

將ls結果輸出到文件filelist

ls > filelist

將ls結果追加到文件filelist最后

ls >> filelist

統(tǒng)計文件filelist內容的行數(shù)

wc -l < filelist

統(tǒng)計字符串filelist的總行數(shù)

wc -l filelist

等待5秒鐘,顯示5 seconds reaches,執(zhí)行l(wèi)s -l命令

sleep 5; echo 5 seconds reaches; ls -l

[在當前進程中找出所有的inetd進程]

ps ax |grep inetd

這個沒看明白,find不會用,呵呵

find / -name core -exec rm { } ; &

設置filename為日期+年月日.log

filename=`date "+%Y%m%d"`.log

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 木里| 天峻县| 保德县| 清镇市| 义乌市| 青州市| 鲁山县| 余干县| 永清县| 凤山市| 明水县| 淮滨县| 永川市| 贵州省| 林甸县| 新绛县| 木兰县| 绩溪县| 康保县| 澜沧| 东方市| 平邑县| 丰城市| 衡山县| 西和县| 苍南县| 榆中县| 准格尔旗| 密云县| 安新县| 二连浩特市| 子长县| 襄垣县| 丹东市| 车致| 东莞市| 平定县| 马鞍山市| 湛江市| 酒泉市| 南投县|