您的位置:首页 > 运维架构 > Shell

第四章 第一节 shell脚本的变量 2018.3.20

2018-03-20 20:45 169 查看
     Shell的作用:命令解释器,人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上
        流程:  用户请求-->shell-->Linux内核-->硬件
一、shell基础
   1、历史命令:history    
                                 history [-raw] histfiles
               n(重要):数字,列出最近的n笔目录(包括刚输入的history n)
               -a (重要):将目前的shell中的所有history命令新增入histfiles(文件)中,
                                  若没有加histfiles,则默认写入~/.bash_history(~家目录)
               -c:将目前的shell中的所有history内容全部消除
               -r :将histfile的内容读到目前这个shell的history记忆中
               -w:将目前的history记忆内容写入histfiles中
                      在默认的情况下,会将历史纪录写入~/.bash_history当中!
          注:历史命令默认保存1000条,可以在环境配置文件 /etc/profile 中修改
         历史命令的调用:
                 使用上、下箭头调用以前的历史命令
                 使用“!n”重复执行第n条历史命令
                 使用“!!”重复执行上一条命令
                 使用“!字串”重复执行最后一条以该字串开头的命令
   2、命令与文件补全
                   只要在输入命令或文件时,按“Tab”键就会自动进行补全
   3、命令别名:alias
                        例 alias grep='grep --color=auto'(等号两边不能有空格)
            注:(1)alias 仅在当前shell 生效。如果重新开启一个shell,或者重新登录,
                     则这些alias将无法使用
                   (2)alias永久化的方法
                         <1>.若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc中。
                              然后# source ~/.bashrc
                          <2>.若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,
                               然后# source /etc/bashrc
   4、删除别名:unalias
   5、多命令顺序执行
           ;           命令1;命令2
            &&        命令1 && 命令2      当命令1正确执行,则命令2 才 会执行;
                                                        当命令1执行不正确,则命令2 不 会执行 
            ||            命令1 || 命令2          当命令1执行不正确,则命令2 才 会 执行;
                                                        当命令1正确执行,则命令2 不 会执行
          例:  某文件在当前文件下存在,打印good;在当前目录下不存在,打印 not good
             1s fi1e1.txt &> /dev/nu11 && echo"good”|| echo"not good"
             ls file2221.txt &> /dev/null && echo"good" || echo"not good"
   6、管道符:
                  命令1 | 命令2       命令1的正确输出作为命令2的操作对象
   7、cut  选取命令
        (1)cut -d'分隔字符' -f fields <==用于有特定分隔字符
                    -d :后面接分隔字符。与-f 一起使用;
                     -f :依据-d 的分隔字符将一段信息分割成为数段,用-f 取出第几段的意思;
         (2)cut -c 字符区间<==用于排列整齐的信息
                     -c :以字符(characters) 的单位取出固定字符区间;
   8、tee   将某个程序的中间过程记录下来
                      tee [-a] file
              -a :以累加(append) 的方式,将数据加入file 当中!
   9、echo   输出命令
           -e :支持反斜线 \ 控制的字符换行
           -n :-n不要在最后自动换行
           -help:显示帮助
           -version:显示版本信息
二、Shell 脚本(.sh)
   1、脚本的基本元素
    (1)#!/bin/bash  ----->必须在第一行
    (2)# ---->注释  
              #des:脚本描述
              #date:脚本日期
              #autor:作者
              #email
     (3)变量
     (4)控制 
   2、运行脚本
           . /脚本名  当前目录下运行脚本
三、Shell 变量
   1、命名格式
      (1)由字母、数字、下划线组成,不能以数字开头
      (2) 在Bath 中,变量默认类型是 字符串型。
           若要进行数值运算,则必须指定变量类型为数值型          
   2、变量分类
              本地变量:用户变量,仅在创建它的 shell 中使用,可以任意使用和修改
              环境变量:定义在 /etc/profile
              内部变量:由系统提供的。与环境变量不同,但用户不能修改它们。
   3、本地变量
      (1) 在用户现在的shell生命期的脚本中使用              
      (2)  赋值格式:变量 =值(等号两边不能有空格)
      (3)  变量的引用
                       $变量名         
          注: 1)等号两边不可以有空格
              2)取值包含空格,必须用双引号括起来
              3)Shell变量可以用大小写字母,区分大小写
      (4)清除变量     unset 变量名(变量名前没有$)
                  显示本地所有变量  set
   4、环境变量
     (1)环境变量用于所有用户进程(通常称为子进程)。
         登陆进程称为父进程,通过pstree可以查看
     (2)环境变量可以用于所有子程序,着包括编辑器、脚本和应用
     (3)环境变量可以在命令行中设置,但用户注销时这些值将丢失
     (4)环境变量均为大写
     (5)必须用export命令导出
      (6)命令
                  设置环境变量  variable-name=value
                                    export variable-name(环境变量名大写)
                   显示环境变量  env可以看到所有的环境变量
                                     echo $环境变量名(显示一个变量)      
                   清除环境变量  unset 环境变量名         
        (7)让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改
            Bash的初始化文件有:/etc/profile、~/.bash_profile、~/.bash_login、
                                            ~/.profile、~/.bashrc、/etc/bashrc
   5、内部变量
          $# ——传送给shell程序的位置参数的数量(几个)
       $?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。
                     0表示没有错误,其他任何值表明有错误。
       $0——shell程序的名称
       $*——调用shell程序时所传送的全部参数的单字符串,“参数1““参数2”…形式保存的参数 
          $@——“参数1 参数2”…形式保存的参数
       $n——第n个参数
       $$——本程序的PID
四、Shell 中的特殊符号
   1、注释符#
            除了#!/bin/bash里的#特殊
   2、美元符$
            变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。
                          变量字符长度超过1个时,用{}括起来
   3、单引号
            被引起的字符全部 原样打印
   4、双引号
             引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。
   5、倒引号(数字1键旁边的那个键)
             引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
   6. 反斜线
              反斜线是转义字符,它能把特殊字符变成普通字符。
              在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。
         注:在单引号括起来的字符串中
9978
,反斜线也成为普通字符,而失去转义字符功能。
    7.获取字符串长度
            string="abcd"          
            echo ${#string} #输出4
    8.提取子字符串
            以下实例从字符串第2 个字符开始截取4 个字符
                    string="runoobis a great site"
                     echo ${string:1:4} # 输出unoo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: