shell基础

Posted on 2015-12-13 21:15  Y-HKL  阅读(171)  评论(0编辑  收藏  举报

1.shell概述

1.1shell是什么

shell是一个命令行解释器,她为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序

shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令

1.2shell的分类

*Bourne Shell:从1979起Unix就开始使用

  Bourne Shell,Bourne Shell的主文件名为sh

*C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名

*Shell的两种主要语法类型有BOUrne和C,这两种语法不兼容。Bourne家族主要包括sh、    ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh

*Bash:Bash与sh兼容,现在使用的Liunx就是使用Bash作为用户的基本Shell

1.3Liunx支持的shell

查看/etc/shells文件

2.shell脚本的执行方式

2.1echo输出命令

语法:echo [选项] [输出内容]

选项:

  -e    支持反斜杠控制的字符转换

例:

2.2第一个脚本

2.3脚本执行

*赋予执行权限,直接运行

  chmod  755 hello.sh

  ./hello.sh

*通过Bash调用执行脚本

  bash hello.sh

3.bash的基本功能

3.1历史命令与命令补全

3.1.1历史命令

语法:history [选项] [历史命令保存文件]

选项:

  -c    清空历史命令

  -w    把缓存的历史命令写入命令保存文件 ~/.bash_history

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改

3.1.2历史命令的调用

*使用上、下箭头调用以前的历史命令

8使用“!n”重复执行第n条历史命令

*使用“!!”重复执行上一条命令

*使用“!字符串”重复执行最后一条以该字符串开头的命令

3.1.3命令与文件补全

在bash中,命令与文件补全,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全

3.2别名与快捷键

3.2.1命令别名

语法:alias  别名='原命令'

查看别名:alias

3.2.2命令执行时的顺序

*1.执行用绝对路径或相对路径执行的命令

*2.执行别名

*3.执行bash的内部命令

*4.执行按照¥PATH环境变量定义的目录查找顺序找到的第一个命令

3.2.3让别名永久生效

修改/root/.bashrc的文件内容

3.2.4删除别名

语法:unalias 别名

3.2.5bash常用快捷键

3.3输入、输出重定向

输出重定向

     类型     符号    作用
标准输出重定向 命令  >  文件 以覆盖方式
命令  >  文件 以追加方式
标准错误输出重定向 错误命令  2>  文件 以覆盖方式
错误命令  2>>  文件 以追加方式

正确输出和错误输

出同时保存

   命令 > 文件  2>&1  以覆盖方式
   命令  >> 文件  2>&1 以追加方式
   命令   &>  文件 以覆盖方式
   命令   &>>  文件 以追加方式
   命令   >>   文件1  2>> 文件2

把正确的输出追加到文件1中,

把错误的输出追加到文件2中

输入重定向

语法:命令  <  文件

3.4多命令顺序执行与管道符

多命令顺序执行

  多命令执行符    格式      作用
            ;    命令1;命令2

多个命令顺序执行,命令之间没

有任何逻辑联系

          &&    命令1&&命令2

逻辑与

当命令1正确执行,则命令2才会执行

当命令1执行不正确,则命令2不会执行

          ||    命令1&&命令2

逻辑或

当命令1执行不正确,则命令2才会执行

当命令1正确执行,则命令2不会执行

管道符

语法:命令1 | 命令2               //命令1的正确输出作为命令2的操作对象

3.5通配符与其他特殊符号

      通配符                        作用
    ? 匹配一个任意字符
    * 匹配0个或任意多个字符
    [] 匹配中括号中任意一个字符
    [-] 匹配中括号中任意一个字符,-代表一个范围
    [^] 逻辑非,表示匹配不是中括号内的一个字符

bash中其他特殊字符

      符号           作    用
       ' ' 单引号。在单引号中所有的特殊符号都没有特殊含义
       " "

双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”、“\”是

例外,拥有“调用变量值”、“引用命令”、“转义符”的特殊含义

       ` `

反引号。反引号括起来的内容是系统命令,在bash中会先执行它。

和$()作用一样

      $() 和反引号作用一样,用来引用系统命令
      # 在shell脚本中,#开头的行代表注释
      $

用于调用变量的值,如需要调用变量name的值时,需要用$name

的方式得到变量的值

      \ 转移符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。

 

4.bash变量

什么是变量

变量是计算机内存的单元,其中存放的值可以改变。当shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息

4.1用户自定义变量

语法:变量名=变量值

注意:如果变量值中含有空格就要用""

变量的调用:$变量名

变量的查看:set

变量的删除:unset  变量名

4.2环境变量

4.2.1环境变量是什么

用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效

 

4.2.2设置环境变量

export  变量名=变量值

查看环境变量:env

删除环境变量:unset  变量名

4.2.3系统常见环境变量

PATH :系统查找命令路径

PATH变量叠加:PASH="$PATH":/root/sh

 4.3位置参数变量

   位置参数变量                     作      用
  $n n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要用大括号包含,如${10}
  $* 这个变量代表命令行中所有的参数,$*把所欲的参数看成一个整体
  $@ 这个变量也代表命令行中的所有的参数,不过$@把每个参数区分对待
  $# 这个变量代表命令行所有参数的个数

4.4预定义变量

4.4.1预定义变量

    预定义变量                           作       用
  $? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
  $$ 当前进程的进程号(PID)
  $! 后台运行的最后一个进程的进程号(PID)

4.4.2接收键盘输入

语法:read [选项] [变量名]

选项:

  -p “提示信息”      在等待read输入时,输出提示信息

  -t 秒数                          read命令会一直等待用户输入,使用此选项可以指定等待时间

  -n 字符数        read命令只接受指定的字符数,就会执行

  -s                                隐藏输入的数据,适用于机密信息的输入