bash基础学习

 

  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-n m到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.进程替换

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值