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

Linux: Bash Shell Script

2020-06-22 11:08 113 查看

Bash Shell Script

  • Bash变量
  • Shell编程
  • 目录

    简记

    Linux中Shell种类

    Less /etc/shells: 查看linux下的shell
    Sh Bash Csh

    创建

    vim sample.sh
    #!/bin/sh
    echo "Hello world!"

    执行方法一:

    chmod 755 sample.sh
    ./sample.sh

    执行方法二:

    bash sample.sh #文件内容开头可以不用指定‘#!/bin/sh路径’

    命令

    history #-c:清空历史
    #-w:保存历史命令/home/user/.bash_history文件中

    Bash的快捷键

    Con a
    Con c 取消

    Bash的标准输入、输出:

    键盘 /dev/stdin	0 标准输入
    显示器 /dev/stdou	1 标准输出
    显示器 /dev/stderr	2 标准错误输出

    Bash的输出重定向:把命令的输出结果由显示器改为文件中

    命令 > 文件 覆盖方式,只能保存命令执行正确后的结果。
    命令 >> 文件 追加方式,只能保存命令执行正确后的结果。
    命令 2> 文件 覆盖方式,保存命令执行错误的结果。
    命令 2>> 文件 追加方式,保存命令执行错误的结果。
    命令 >/>> 文件 2>&1 覆盖/追加方式,保存命令执行正确/错误结果到同一个文件中。&>
    命令 >> 文件一 2>>文件二 追加方式,保存命令执行正确/错误结果到同一个文件中。

    Bash输入重定向:改由键盘输入方式为由文件读入输入的方式

    wc 【选项】 【文件名】
    -c:统计字节数
    -w:统计单词数
    -l:统计行数

    Bash多条命令顺序执行

    Lsjkkjkjkjkj ; cd /etc ; date 用分号分割不同命令,按顺序独自无关系分别执行,没有任何逻辑联系。
    命令一 && 命令二 当命令一执行正确时才继续执行命令二。
    命令一 || 命令二 当命令一执行错误时才继续执行命令二。

    Bash管道符

    命令一 | 命令二 | 命令三 把命令一的结果作为命令二的执行条件,再把命令二的结果作为命令三的执行条件。
    
    Grep 和 find类似,都是查找。
    Netstat –an | grep “查找内容” | wc –l 执行nestat,然后在结果中查找“查找内容”,将查找的内容统计行数

    Bash通配符

    ?匹配任意一个字符
    *匹配0个或任意多个字符,也就是匹配任何内容。
    []匹配括号其中的任意一个字符。
    [-]匹配括号中任意一个字符,-表示范围,如[0-9],[a-z],[0-9,a-z]
    [^]逻辑非,匹配不是括号中的一个字符,如[^0-9],代表匹配一个不是数字的字符

    Bash变量

    Bash变量命名

    字母数字下划线
    默认是字符型,指定为数值型时才能进行运算。
    赋值时用等号,但两端不能由空格。
    若赋值存在空格,用双引号,name=”You are so beautiful!”,其中“\” “$”等都是特殊意义符号,但是单引号’‘扩起来的内容都是普通字符串。
    在变量中可以使用转义字符”\“
    环境变量最好大写,以便于区分。
    Name=”You”
    Name=“you are so beautiful”
    Value=”$name”

    Bash用户自定义变量

    增、删、查、改
    变量定义:name=”haha“
    变量调用:$name
    变量查看:set
    变量删除:unset 变量名

    Bash的环境变量

    用户自定义环境变量:
    export AGE=”18”
    系统自带环境变量:
    echo $PATH 显示自带的环境变量,这种变量只能更改内容。(系统命令查找过程)
    修改:PATH=”$PATH”:/home/manager/Desktop/share

    Bash的位置参数变量

    $0, $1, …, $9, ${10, ${11},分别表示命令本身,命令后的第一个参数,第二个参数,…,第十个参数,第十一个参数。
    实例:
    Vim count.sh
    #!/bin/bash
    a=$1
    b=$2
    sum=$(($a+$b))  #$(())将字符转为数值后进行计算
    echo $sum
    chmod 755 count.sh
    ./count.sh 22223 363666 将两数相加
    
    预定义变量:
    $? 上一条命令的执行状态,0:正常,非0:不正常。
    $$ 当前运行的进程ID号,PID
    $! 后台运行的最后一个进程的ID号,PID

    Bash接受键盘输入

    Read 【选项】 【变量名】
    -p 在等待输入时显示的提示信息
    -t 等待时间
    -n 只接受指定的字符数
    -s 隐藏输入数据,用于机密
    变量名可以自定义,默认REPLY
    实例:
    Read -s 30 –p “Please input:” age

    Bash的运算符

    declare 【+/-】 变量名
    -:声明
    +:取消
    -a:声明为数组
    -i:声明为整数
    -x:声明为环境变量
    -p:显示指定变量被声明的类型
    实例:
    X=1
    Y=2
    Declare –i x
    Declare –I y
    Declare sum=$x+$y
    Echo $sum
    $((运算式子))同上功能,但是更加简洁。

    bash变量环境变量配置文件

    生效:
    source 配置文件或.配置文件
    目前linux下环境变量的配置文件:
    /etc/profile
    /etc/profile.d/*.sh
    ~/.bash_profile
    ~/.bashrc
    /etc/bashrc
    面向所用用户
    只面向当前用户

    Shell编程

    正则表达式

    Ls、find、cp 支持通配符
    Grep、awk、sed 支持正则表达式

    基础正则表达式

    *表示星号前一个字符重复0次或无数次。
    .匹配除了换行符以外的任意一个字符。
    ^匹配行。如^hellow,匹配段落以hellow开头的记录。
    $匹配行尾。如hellow$匹配hellow结尾的记录。
    ^$表示匹配空白行。Grep –V ”^$” test.txt 表示取反,即查找除空白行以外行。
    \转义字符,取消其后符号的特殊意义。.$去除空行,\.$表示所有以.结尾的行。
    []中括号中的一个字符,这和通配符类似。[0-9] [a-z] [A-Z]
    [^]匹配出中括号内字符以外的任意一个字符。
    \{3\}前一个字符重复三次。如a\{3\}查找a重复三次的行。
    \{n,m\}前一个字符最少重复n次,最多重复m次。

    扩展正则表达式

    grep默认不支持扩展正则表达式,必须家-E选项后方可使用。
    +前一个字符重复一次或无数次。
    ?前一个字符匹配0次或1次。
    |匹配两个或多个分之选择。Was|his匹配包含was的行,也匹配包含his的行。
    ()视为一个整体。

    Bash的字符截取和替换

    Grep是提取行字符串 –V取反
    文本处理列字符串cut【选项】 【文件名】
    -f行号 提取第几列 cut –f 2,4 test.txt 提取第二和第四列
    -d分隔符,指定以什么符号来作为分隔符 tab 空格 ;等
    文本处理awk编程:
    文本处理sed:对文件中的数据进行选择,替换,删除,增加
    排序sort
    统计wc

    Bash条件判断

    1.判断文件类型:
    Test –e test.txt 文件是否存在
    [-e test.txt] 同上,更加常用
    [-d test] 判断是否为目录
    [-f test.txt] 判断是否为普通文件
    [-l test] 判断是否为连接
    [-s test.txt] 判断文件是否为空
    
    2.两个整数之间的比较
    [  –qe y ] && echo “yes” || echo “no”
    3.字符串之间比较
    Name=”hah”
    [ -z $name ] && echo “yes” || echo “no”
    4.数值比较
    -eq #等于
    -gt #大于
    -ge #大于等于
    -lt #小于
    -le #小于等于
    -ne #不等于

    Bash流程控制

    单分支:
    If [ 条件判断 ]
    then
    pass
    Fi
    双分支:
    If [ 条件判断 ]
    Then
    Pass
    Else
    Pass
    Fi
    多分支判断语句:
    If [ 判断 ]
    Then
    Pass
    Elif [ 判断 ]
    Then
    Pass
    Elif [ panduan ]
    Then
    Pass
    Else
    但所有条件不成立时执行此pass
    Fi
    多分枝case语句:
    Case $变量名 in
    ”1值“)
    Pass
    ;;
    ”2值“)
    Pass
    ;;
    *)
    默认执行此pass
    Esac
    
    Bash的for语句:
    For i in 1值 2值 3值 。。。
    Do
    Pass
    Done
    或者:
    For ((i=1;tiaojian;i=i+1))
    Do
    Pass
    Done
    
    Bash的while语句:条件成立时循环
    While [ 判断 ] #中括号
    Do
    Pass
    Done
    
    Bash的untill语句:条件不成立时循环,和while刚好相反
    Until [ panduan ]
    Do
    Pass
    Done
    
    Bash的exit语句:


    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: