文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Shell设计(一)

Shell设计(一)

时间:2006-12-18  来源:h0000001

BASH Shell

shell简单历史

第一个流行的shell是由Steven Bourne开发出来的,为了纪念他所以称为Bourne shell,简称sh.后来另一个广为流传的shell是由柏克莱大学的确Bill Joy设计的依附BSD版的Unix系统中的shell,这个shell有点类似C语言,所以得名为C shell,简称csh,是Sun中默认的.Linux使用的是Bourne Again Shell(bash),这个shell是Bourne shell的增强版本.是基于GNU的架构下发展而来的.其它还有,商业上常用的K Shell以及TCSH等.

 

BASH主要的优点:

命令编辑能力(类似DOS的doskey功能),它能记忆使用过的指令,按上下键可以查找.~/.bash_history记录的是上一次登入以前执行的指令.

补全功能(比对数据正确性):可以补全指令与文件名称.按下Tab键可以补全,如果有重复的,按两下Tab可以列出所有重复的项.

命令别名(alias)设定功能:  alias lm='ls -al'   ,取消用unalias lm

作业控制,前景背景控制:

Shell Scripts的强大功能:类似DOS中的批处理而功能又强于批处理.

 

 

vi文本处理器

vi分为三种模式:一般模式,编辑模式,命令行模式.

一般模式:

以vi处理文件时,一进入该文件就是一般模式.在此模式下,可以使用上下左右按键来移动光标,可以使用"删除字符"或"删除整行"来处理文件内容,也可以使用复制,粘贴来处理文件数据.

编辑模式:

在一般模式下可以按i,I,o,O,a,A,r,R等字母进入编辑模式,将出现INSERT或REPLACE等字样.按ESC从编辑模式退到一般模式.

命令行模式:

在一般模式中,输入":"或"/"就可以将光标移动到最未一行,在这个模式中,可以搜寻数据,读取,存盘,大量字符替换,退出vi,显示行号等动作.

 

常用指令

 

一般模式                光标移动

h或向左方向键           光标向左移动一个字符

j或向下方向键           光标向下移动一个字符

k或向上方向键           光标向上移动一个字符

l或向右方向键           光标向右移动一个字符

ctrl+f  (forward)     屏幕向前翻动一页

ctrl+b  (back)        屏幕向后翻动一页

ctrl+d                屏幕向前翻动半页

ctrl+u                屏幕向后翻动半页

+                     光标移动到非空格符的下一列

-                     光标移动到非空格符的上一列

n<space>              按下数字后再按空格键,光标会向右移动这一行的n个字符.

0                     移动到这一行的的第一个字符处

$                     移动到这一行的最后一个字符处

H                     光标移动到这一屏幕的最上方的那一行

M                     光标移动到这一屏幕的最中央的那一行

L                     光标移动到这一屏幕的最下方的那一行

G                     移动到这个文件的最后一行

nG                    移动到这个文件的第n行.

n<Enter>              光移向正步移动n行

 

一般模式               查找与替换

/word                 在光标之后查找一个名为word的字符串

?word                 在光标之前查找一个名为word的字符串

:n1,n2s/word1/word2/g 在第n1与n2行之间查找word1字符串,并将该字符串替换为word2

:1,$s/word1/word2/g   从第一行到最后一行查找word1字符串,并将该字符串替换为word2

:1,$s/word1/word2/gc  从第一行到最后一行查找word1字符串,

 

 

 

 

 

变量与变量的设定

echo     显示变量的值

语法:    #echo $variable     <==如果不加$,则会直接显示后面接的字符串

 

env      读取当前系统中的主要变量.注:使用大写字母设定的变量一般都是系统的预设变量.

语法:    #env

 

 

set      显示当前系统中的环境变量,同时也显示用户自定义变量.

语法:    #set

 

 

变量设定规则

1.变量与变量内容以等号"="连结;

2.等号两边不能直接接空格符;

3.变量名称只能是英文字母与数字,其中数字不能是开头字符;

4.若有空格符,可以使用双引号或单引号将变量内容结合起来,但要特别注意,双引号的特殊字符可以保留变量特性,单引号内的特殊字符则仅为一般字符;

5.必要时以跳转字符"\"将特殊符号变成一般符号;

6.在一串指令中,还需要借其他指令提供的信息,可以使用quote"`command`";

7.若该变量为扩增变量内容时,则需要以双引号及$变量名称(如"$PATH":/home)继续累加内容;

8.若该变量需要在其他子程序执行,则以export使变量可以动作;

9.通常大写字符为系统预设变量,自定义变量可以使用小写字符,方便判断;

10.取消变量的方法为:unset 变量名称

 

example:

#name=h0000001      <==设置变量name,并赋值为h0000001

#name="H0000001's blog"  或  #name=H0000001\'s\ blog   <==有特殊字符时的格式

#name="$name"isme   <==变量值的累加

#cd /lib/modules/`uname -r`/kernel    <==指令中的指令

#unset name     <==取消变量

 

 

Note:在设置变量时,单引号与双引号有什么不同:

单引号与双引号最大不同在于双引号仍然可以保留变理的内容,但单引号仅能是一般字符,而不会有特殊字符.

如:

[root@mail root]# name=h0000001
[root@mail root]# echo $name
h0000001
[root@mail root]# myname="$name its me"
[root@mail root]# echo $myname
h0000001 its me
[root@mail root]# myname='$name its me'     <==使用单引号时,$name将失去原有的变量内容,仅为一般字符的显示.
[root@mail root]# echo $myname
$name its me
[root@mail root]#

在输入指令的过程中,quote(`)这个符号代表的意义是什么?

在一串指令中,在`之内的指令将被首先执行,而其执行结果将作为外部的输入信息.

 

 

export 变量

 

unset 变量

 

历史命令(history)

history的用法

#history

#[!number][!command][!!]

detail:

number:   第几个指令

command:  指令开头的几个字母

!:        上一个指令

history指令与"!"的用法很多,如果要执行上一个指令,除使用上下键之处,还可以直接以!!来表示,要执行第n条指令,可以使用!n表示;也可以使用指令标号,如!vi表示执行最近指令开头是vi的指令.

 

 

BASH Shell的配置文件

系统设定值

所谓的系统设定值,也就是每个用户进入到bash shell之后先读取的配置文件.默认有以下几个

1./etc/profile:  这个文件设定了几个重要的变量,如PATH,USER,MAIL,HOSTNAME等,也同时规划出/etc/inputrc这个针对键盘热键设定的文件数据内容.它还规化出/etc/profile.d这个目录.

2./etc/bashrc:   此文件用于规化umask,同时规化提示符的内容(就是PS1)

3./etc/man.config: 此文件的内容规范了使用man时man page的路径在哪里.

个人设定值

个人设定值就是存在个人根目录的那几个隐藏文件.

1.~/.bash_profile: 定义了个人路径(PATH)与环境变量的文件名称.

2.~/.bashrc:  对于个人喜好的bash设定是最重要的,在这里设定个人变量.

3.~/.bash_history: 此文件用于记录曾经用过的命令.

4.~/.bash_logout:  此文件是在注销shell时bash要为你做的事情.

 

 

source   在不注销的情况下直接读入变量配置文件.

语法:   #source 变量配置文件

 

 

 

通配符与特殊符号

 

符号            内容

*              通配符,代表任意字符 

?              代表一个字符

#              注释

\              跳转字符,将特殊字符或通配符还原成一般字符

|              分隔两个管线命令的界定

;              连续性命令的界定

~              用户的根目录

$              即变量前需要加的变量值

&              将指令变成在背景下工作

!              逻辑运算中的"非"(not)

/              路径分隔符

>,>>           输出导向,分别为"取代"与"累加"

'              单引号,不具有变更置换功能

"              具有变量置换功能

``             两个``中间为可以行执的指令

()             中间为子shell的起始与结束

[]             中间为字符组合

{}             中间为命令区块组合

 

组合键          内容

Ctrl+C         终止当前命令

Ctrl+D         输入结束(EOF)

Ctrl+M         就是Enter

Ctrl+S         暂停屏幕的输出

Ctrl+Q         恢复屏幕的输出

Ctrl+U         在提示符下,将整行命令删除

Ctrl+Z         暂停当命令

 

  连续输入指令的方式 #command1; command2   两个指令间用";"分隔,代表不论command1执行结果为何,command2都会被执行 #command1 && command2 &&代表当command1执行结果返回0值时,也就是没有错误信息时,command2才会开始执行 #command1 || command2 ||代有当command1有错误信息时,command2才会执行.      
命令重定向 什么是重定向(redirect)? 简单地说,就是将目当所得到的数据转到其他地方. 标准输入:  代码为0,或称为stdin,使用方式为< 标准输出:  代码为1,或称为stdout,使用方式为1> 错误输出:  代码为2,或称为stderr,使用方式为2> 基本的指令书写方式为: 指令   >   设备或文件   <==将原来由屏幕输出的正确数据输出到>右这的文件或设备;       2>              <==将原来该由屏幕输出的错误数据输出到2>的右边的文件或设备;       >>              <==将原本由屏幕输出的正确数据累加输出到>>右边的文件中;       <               <==由<的右边读入参数文件; /dev/null    <==可视为垃圾设备   example: #ls -al > list.txt  <==将显示结果输出到list.txt文件中,若该文件己存在则予以取代 #ls -al >> list.txt <==将显示结果累加到list.txt文件中,该文件为累加,旧数据保留 #ls -al 1> list.txt 2> list.err <==将显示数据正确输出到list.txt,错误的数据输出到list.err #ls -al 1> list.txt 2> &1 <==将显示数据不论正确或错均输出到list.txt #ls -al 1> list.txt 2> /dev/null <==将显示的数据,正确的输出到list.txt,错误的数据予以丢弃.     管线命令 管线命令使用的是"|"界定符号. 管线命令"|"仅能处理经由前一个指令传来的正确信息,也就是标准输出(stdout)信息,对于标准错误信息并没有直接处理能力.每个管线部分都是指令,而后一个指令的输入是前一个指令的输出.     cut    将同一行里的数据进行分解. 语法:   #cut -d "分隔字符" [-cf] fields 参数说明: -d:   后面接的是分隔字符,默认是空字符 -c:   后面接的是第几个字符 -f:   后面接的是第几个区块     sort   语法:   #sort [-t 分隔符][(+起始)(-结束)][-nru] 说明: -t 分隔符:  使用分隔符隔开不同区块,默认是tab +start -end: 由第start区块排序到end区块 -n:  使用纯数字排序(否则会以字母方式排序) -r:  反向排序 -u:  相同出现的一行,只列出一次     wc    相当有用的计算文件内容的一个工具组 语法:  #wc [-lmw] -l:   多少行 -m:   多少字符 -w:   多少字     uniq   删除重复的行从而只显一个 语法:   #uniq     tee   同时将数据显示在屏幕上和存到文件中 语法:  #last | tee last.txt        tr    语法:   #tr [-ds] SEM1 -d:  删除SEM1这个字符串 -s:  取代重复的字符 example:  #last | tr '[a-z]' '[A-Z]' #cat /etc/passwd | tr -d :   split    分割文件 语法:  #split [-bl] 输入文件 输出文件前导字符 -b:   以文件size来分 -l:   以行数来分  
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载