bash基础学习

来源:互联网 发布:淘宝猪哼少焦点访谈 编辑:程序博客网 时间:2024/06/07 18:50

 

  bash(Bourne Again Shell),是一种命令解释器,类似于windows下的CMD,同时也是一门高级编程语言,作为命令你给解释器,他们通过提示符响应并处理用户在命令行上输入的命令。而作为一门编程语言,他们将处理存放在所谓shell脚本文件中的命令,(脚本就是用来处理多个shell命令的可执行文本).

  shell基础:

  初始化文件:当启动shell时候,他将运行初始化文件初始化自己。不用的shell有不同的初始化文件,一般用户只需要主目录下.bash_profile和bashrc文件。

  添加PATH路径        PATH=$PATH:$路径名

  更改PATH路径     export PATH=‘所要更改的内容’

  重定向标准输出:默认情况下,shell将命令的标准输出发送到屏幕上。除非将标准输入与输出重定向。

文件描述符:0(标准输入)1(标准输出)2(标准错误输出)。                                 重定向符号为 > ,默认是 1>;< 默认是  0<

复制文件描述符:

leo@Leo-PC:/media/Leo/C$ cat x y 1>hold1 2>&1

leo@Leo-PC:/media/Leo/C$ cat hold1

cat: x: 没有那个文件或目录

this is y.

这里2>&1声明文件描述符2为文件描述符1的副本,这样做的结果是,标准输出和标准错误输出均被重定向到文件hold中。

 

 

shell脚本:

  是包含shell可执行命令的文件。chmod是改变用户权限的命名,UGO是指user,group,other,文件有3种属性r,w,x.脚本必须是要可读的。

  #开始一行注释。

  命令分隔符有  ;,换行符,/,|,&

  双引号括起来的字符串具有转义作用,单引号括起的不具有。

  作业控制:

  jobs,列出作业;fg,将作业移到前台运行;bg,将作业移到后台运行.

  操作目录栈:

  pushd,popd,dirs

  参数和变量:

  形式  变量名=值

  leo@Leo-PC:/media/Leo/C$ leo=huixuejie

  leo@Leo-PC:/media/Leo/C$ echo leo

  leo

  leo@Leo-PC:/media/Leo/C$ echo $leo

  huixuejie

  变量属性:1.readonly 使变量值不可改变

          2.declare和peset:为变量赋予属性。

          -a 声明一个数组变量

          -f 声明一个函数变量

          -i 声明一个整形变量

          -r 声明变量为只读,也可用readonly

          -x 输出变量(设置为全局变量),也可用export

          3. unset 删除变量

  特殊字符:

 

 

  进程:是指命令在Linux上的执行,永和登录启动的shell与其他一样,也是一条命令或者一个进程。

  进程结构:类似于文件结构,它可以是一个层次似的机构,有父进程,子进程,根进程。fork(创建)进程。

  进程编号:每个进程开始的时候,linux为其分配一个唯一的PID(process identification),PPID为父进程。

 

 

  命令历史机制:历史机制是一项对C shell的改造功能。它维护了最近发出的命令行的列表。~

  重新执行和编辑命令:三种方式

  1.fc 命令:显示,编辑和重新执行命令

  fc -l 显示最近出现的16个命令。后面可以带参数[first][last],表示从first开始last结束匹配的命令。

  fc [-e editor][first][last]可以用来编辑和重新执行前面的命令。

  fc -s 不调用编译而重新执行命令

  2.使用感叹号(!):

  !!:前一个命令

  !n:历史列表中编号为n的命令

  !-n:往前第n条命令

  !string:最近以string开头的命令行。

  字符标志有:

  n第n个字

  ^第1个字(字的编号以0开始)

  $最后一个字

  m-nm到n的所有字

  n*n代最后之间的所有字

  *除命令以外的所有字

  %最近的匹配?string?搜索的那个字

  修饰符:有时候需要改变正要重新执行的实践的某个方面,可以在字符标志后面或者实践标志符后面放置一个或者多个修饰符,每个修饰符前面必须有一个:号。

  替换的语法是[g]s/old/new/

  添加g表示全局替换。

  快速替换:^old^new^

  其他修饰符:

  e(extension)删掉除文件名扩展名之外的所有内容

  h(head)删除路径名的最后部分

  p(print-not)显示命令,但是不要执行

  q(quote)引用该替换,以防止对其进行进一步的替换

  r(root)删除文件扩展名

  t(tail)删除路径名中除末尾之外的所有元素

  x去q类似,除了单独引用替换中的每个字

  3.Readline库

  bath的命令行编辑功能通过Readline库实现,任何C语言编写的应用程序都可以使用这个库。

  编辑模式有2种,vi模式,emacs模式。默认是emacs模式

  emacs模式:不必在命令模式和输入模式切换.

  ctrl+B向后移动一个字符

  ctrl+F向前移动一个字符,可以在移动前面加上数字,但需要先键入ESC

  ctrl+A跳到行首

  ctrl+E跳到行尾

  ctrl+D可以删除一个字符

  ctrl+K可以删除光标到行末的所有字符

  ESC+b/f 向后向前移动一个字

  

别名:是一种名称(通常短小),shell将其翻译成另一个(通常较长的)名字或者(复杂的)命令.

alias,unalias ,别名中双引号括起的部分,会被展开,单引号括起的部分不会被展开。

 

函数:shell函数类似shell脚本,里面存放了一系列可在后期执行的命令。因为shell将函数存放在物理内存(RAM)而不是磁盘文件中,所以shell访问函数的速度要比访问脚本的速度快很多。

声明语法:

[function]function-name()

{

commands

}

其中,function-name是为调用该函数使用的函数名,commands由调用函数是将要执行的命令组成。

例如$function whoson()

>{

>date

>echo "User currently Logged On"

>who

>}

显示日期,一条标题,和一个正在使用该系统的用户列表

若希望函数总是可以,不必要每次输入,则可以将函数放入初始化文件~/.bash_profile中

 

bash的特性和选项:

命令行选项:

表8-12  命令行选项

    

    

    

help

显示用法信息

--help

no edit

阻止用户在交互式shell中使用Readline库编辑命令行

--noediting

no profile

阻止读取初始化文件/etc/profile~/.bash_profile~/.bash_login~/.profile

--noprofile

no rc

阻止读取~/.bashrc初始化文件;如果shellsh调用的话,这个选项默认是打开的

--norc

POSIX

POSIX模式下运行bash

--posix

version

显示bash版本信息并退出

--version

login

使bash像登录shell一样运行

-l(小写l)

shopt

带上shopt选项opt运行shell-O(大写O)设置该选项,+O删除该设置

[+-]O [opt]

end of options

在命令行中发信号表示选项结束;后面的字将作为参数,即使它们以连字符(-)开头

--

shell特性:

 

表8-13  bash特性

    

    

    

  

allexport

在执行这条命令之后自动输出用户创建的所有变量和函数

set -o allexport

set -a

braceexpand

使bash执行花括号扩展(默认)

set -o

braceexpand

set -B

cdspell

纠正传递给cd的参数中目录名中小的拼写错误

shopt -s cdspell

 

cmdhist

保存一个多行命令中的所有文本行,如果需要将添加分号

shopt -s cmdhist

 

dotglob

使模糊文件引用中的shell特殊字符(通配符)匹配以句号(.)开头的文件名;默认情况下,这些特殊字符并不匹配开头的句号;必须总要显式地指定文件名...,因为没有模式曾匹配它们

shopt -s dotglob

 

emacs

为命令行编辑指定emacs模式(默认)

set -o emacs

 

errexit

使bash在遇到简单的命令失败(而不是控制结构)时退出

set -o errexit

set -e

execfail

使shell脚本在找不到exec参数所指的文件时继续运行;默认情况下,当exec找不到其参数指定的文件时,脚本将终止

shopt -s execfail

 

                                                                                                                                                         (续表)   

    

    

    

  

expand_aliases

使别名扩展(默认情况下,对于交互式shell是开启的,而对于非交互式shell是关闭的)

shopt -s

expand_alias

 

hashall

使bash记住它使用PATH找到的命令的位置

set -o hashall

set -h

histappend

shell退出时,使bash把历史列表追加到HISTFILE命令的文件后面;默认情况下,bash会覆盖掉这个文件

shopt -s

histappend

 

histexpend

使历史机制(使用感叹号)工作(默认);关闭这个特性将关闭历史扩展

set -o histexpand

set -H

history

开启命令历史特性(默认情况下是开启的)

set -o history

 

ignoreeof

指定bash接收到10EOF字符之后才能退出;在信号不好的链路上很有用

set -o ignoreeof

 

monitor

启用作业控制(默认启用)

set -o monitor

set -m

nocaseglob

使模糊文件引用匹配文件名而不区分大小写(默认关闭)

shopt -s

nocastglob

 

noclobber

帮助阻止文件覆盖(默认关闭)

set -o noclobber

set -C

noglob

关闭路径名扩展(默认关闭)

set -o noglob

set -f

notify

如果启用了作业控制,将立即报告后台作业的终结状态;默认行为是在显示下一个提示符之前显示该状态

set -o notify

set -b

nounset

当在交互式shell中使用未设置变量时,将显示一条错误消息并退出shell脚本

set -o unset

set –u

nullglob

使bask扩展模糊文件引用,这些模糊文件引用不能将文件名与一个空字符相匹配。默认情况下,bash无需扩展这些文件引用就可以传递它们

shopt-s nullglob

 

posix

POSIX模式返回bash

set-o posix

 

verbose

bask读取命令行时显示这些命令行

set-o verbose

set-v

vi

为命令行的编辑指定vi编辑模式

set-o vi

 

xpg_echo

使内置命令cd在无需-e选项的情况下扩展反斜线转义序列

shopt –s xpg_echo

 

xtrace

启用shell调试功能

set-o xtrace

set-x

 

打开和关闭shell特性:set -o/+o 

 shopt -s/-u 若用shopt更改set设置,则需要包含-o选项

 

处理命令行:命令行展开:

1.花括号展开:将花括号中以逗号隔开的字符串展开为一空格分隔的字符串列表。

2.带字符展开:带字符(~)

3.参数展开和变量展开:后面没有开放的美元符号$将引入参数或者变量展开

4.算数展开:$((expression))

5.命令替换:是用命令的输出来替换该命令

6.分词:参数和变量展开,命令替换和算数展开的结果都可以作为分词的候选者。

7.路径名展开。

8.进程替换

 

 

 

 

 

 

 

 

 

原创粉丝点击