首页 > 代码库 > Shell 基础

Shell 基础

shell程序:解释执行,过程式编程

        计算机:二进制指令执行

        #!/bin/bash

        #!/usr/bin/env python

运程脚本:

    chmod +x exp.sh   ./exp.sh

     bash exp.sh

     &&      a && b 只有第一个正确,第二个才会执行。 第一个失败,第二个也不会执行

      ||   a|| b  第个正确。第二个不会执行。第一个失败了才会执行第二个

grep:

        grep  文本过滤egrep , fgreg

        sed   文本编辑器

        awk    文本报告生成器    

    grep -E 等于egrep

        --color=auton

        -v: 显示不能被匹配到行

        -i:忽略大小写

        -o:仅显示匹配到的字符串

        -q: 静默模式,不输出任何信息

        -A # :after ,后#行

        -B # : before 前#行

        -C # :前后各 # 行

    基本正则表达式:

        字符匹配

            .:任意单个字符

           []:指定范围内的任意单个字符

           [^]:指定范围外的任意单个字符

                    [:digit:]    [:lower:]   [:alpha:] [:alnum:] [:punct:] [:space:]

        匹配次数:(默认工作在贪婪模式)

            用在要指定次数的字符后面。用于指定前面的字符出现的次数

            *:重复任意次

            \?:匹配前面的字符0次或1次

            \+:匹配前面的字符至少1

            .*:任意长度,任意次数

            \{n,m\}: 匹配到至少n次,至多m次

    位置锚定:

            ^:行首锚定

            $:行尾锚定

            ^PATTERN$: 用于模式匹配整行:

            ^$:匹配空行

            \< 或 \b:词首锚定。用于单词模式的左侧

            \> 或 \b:词尾锚定。用于单词模式的右侧

    分组:

        \( \): 将一个或多个捆绑在一起当作一个整体进行处理

            Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中, \1,\2,\3......

                \(ab\+\(xy\)*\)

                    \1:ab\+\(xy\)*

                    \2:xy

    后向引用 :引用前面的分组括号中的模式所匹配字符

            扩展的正则表达式

                egrep:

                    a|b :a或者b 例如:babd

                    (a|b): ab

    bash 基础特性

            变量类型:

                    bash变量:

                            本地变量:生效范围当前shell进行

                            环境变量:当前shel及其子shell :declare -x name=cbw

                            局部变量:当前shell进程中某代码片断(通常指函数)

                            位置变量:  $1, $2,  输入参数的

                            特殊变量:$?, $0, $@, $#

                    本地变量:

                            变量赋值:name="value"

                                        变量引用 :直接使用 name =‘usrername‘  变量引用  name=$username  命令引用 :name=‘command‘或者name = $(command)

                            变量引用 :${name} , $name

                                        "":弱引用  变量名会替换为变量值

                                        ‘‘ :强引用   变量名不会替换为变量值

                            set :显示所有环境变量

                            销毁变量 unset name

                    环境变量:

                            export name =VALUE

                            declare -x name=VALUE

                    显示所有环境变量

                            env, printenv, export

                     销毁变量unset name

                    bash有许多内建的环境变量:

                            PATH: SHELL , UID。 HISTSIZE PWD OLD HISTFILE PS1

                            declare -r name :readonly ,常量了

                    位置变量

                            $1,$2

                            $0:命令本身。

                            $*:传递给脚本的所有参数

                            $@:传递给脚本的所有参数

                            $#:传入参数的个数

                            shift #: 换

                    bash配置文件

                            全局配置:

                                /etc/profile

                                        /etc/profile.d/*.sh

                                /etc/bashrc

                              个人配置:

                                    ~/.bash_profile

                                     ~/.bashrc

                             profile类:交互式登录shell的配置(1.输入账号和密码登录2. 使用su  - username)

                             bashrc类:非交互式登录shell的配置(1.su username  2.图形界面下打开的终端,执行脚本)

                bash算术

                    let n=1+3 输出4

                      echo $[$n+$m]  n=1,m=2 echo 3

                      echo $(($n+$m))  n=1,m=2 echo 3

                      expr $n + $m

                      $RANDOM 生成随机数 echo $[$RANDOM%60+1]

                      let c+=1    等于 let c++
        条件测试:

            判断某些场景是否满足。

                    test 表达式

                    test [表达式]

                    test [[ 关键字 ]]

            数值测试:-gt -ge -lt -le -eq -ne

            字符串测试: ==   >   <  != ~=(左侧的字符串是否可以被右边的模式匹配。匹配则为真)        -z "string " 测试字符串是否为真,空则为真

                                

                            

本文出自 “祝融与火” 博客,请务必保留此出处http://notezr.blog.51cto.com/9424982/1917892

Shell 基础