• bash基础教程


    bash语句

    bash格式:#!/bin/bash
    “# !” 是一个约定的标记,它告诉系统这个脚本需要什么解释器

    1、shell字符串:

    字符串可以用单引号,也可以用双引号,也可以不用引号.
    单引号字符串:
    ·单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    ·单引号字符串中不能出现单引号(对单引号使用转义符也不行)
    双引号字符串:
    ·双引号里的内容可以有变量
    ·双引号里可以出现转义字符
    拼接字符串: 表示使用多个变量与字符串拼接的变量.
    获取字符串长度: ${#’变量名’} 表示对应变量名的字符长度
    提取字符串: ${‘变量名’:2:5} 表示从’变量’字符串中的第3个字符开始截取5个字符串
    查找字符串: expr index “变量” “查找的字符串” 会根据字符串的位置进行输出.
    shell数组:
    bash(shell)支持一维数组(不支持多维的),并且没有限定数组的大小.
    数组元素的下标由”0″开始编号.获取数组中的元素要利用下标.下标可以是整数或算数表达式,应大于或等于”0″.

    2、定义数组:

    用括号来表示数组.数组元素用”空格”符号分割开.定义数字的一般形式为:
    直接定义 : 数组名=(值1 值2 …值x) | 各个分量定义: 数组名[0]=xxx 数组名[1]=xxx 数组名[2]=xxx
    读取数组:
    读取数组元素值格式:
    ${数组名[下标]}
    ${数组名[@]}与${数组名[*]} 表示获取数组名对应的所有元素.
    获取数组长度:
    获取数组长度的方法与获取字符串长度的方法相同:
    length=${#数组名[@]}
    或:
    length=${#数组名[*]}
    获取数组中单个元素的长度
    length=${#数组名[n]}

    3、变量:

    3.1、变量类型:

    1、局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效.其他shell启动的程序不能访问局部变量.
    2、环境变量:所有的程序,包括shell启动的程序,都能访问环境变量.有些程序需要环境变量来保证其正常运行.必要的时候shell脚本也可以自定义环境变量.
    3、shell变量:shell变量时由shell程序设置的特殊变量.shell变量中有一部分是环境变量,有一部分是局部变量.这些变量保证了shelll的正常运行.

    3.2、定义变量:

    直接变量名赋值就可以:

    export 赋值

    例:
    a=”test”
    ※ 注意事项:变量名和等号之间不能有空格.以及如下规则:
    ● 首个字符必须为英文大小写字母“ a-z、A-Z ”
    ● 中间不能有空格,可以使用下划线 “ _ “
    ● 不能使用标点符号
    ● 不能使用bash里的关键字。(即变量名不可以与其他命令相同)

    3.3、使用变量:

    使用定义过的变量,只要在变量名前加 ” $ ” 即可.(再次赋值时,不需要加 ” $ ” )
    例:
    name=’test’
    echo $name
    echo ${name}
    变量名的大括号为可选项.为了方便解释器识别变量的边界
    {}标识括号内的值为变量

    3.4、只读变量:

    使用readonly 命令可以将变量属性定义只读.
    例:
    name=’test’
    readonly name
    如果再次赋值 name 变量,就会报错。

    3.5、删除变量:

    unset命令可以删除变量,直接unset “变量名”
    例:
    unset“a”
    删除变量a,a不在是变量

    4、for循环格式

    #! /bin/bash
    for x(变量)in `expr 1 100`(变量的范围)
    do (循环语句的开始)
    …… (需要循环的命令)
    done (循环语句结束)
    #! /bin/bash
    for ((表达式表达式表达式))
    do (循环语句的开始)
    …… (需要循环的命令)
    done (循环语句结束)
    for ((i=1(赋给i的原始值为1);i<10(变量i的值小于10);i++(每次循环一次,变量就加一,步进值为1)))
    for ((i=1(赋给i的原始值为1);i<10(变量i的值小于10);i=i+2(每次循环一次,变量就加二,步进值为2)))
    for ((i=1(赋给i的原始值为1);(表达式为空则无限循环);i++(每次循环一次,变量就加一,步进值为1)))

    5、if循环格式

    #! /bin/bash
    if (条件1)
    then (动作1)
    elif (条件2)
    then (动作2)
    …… (命令)
    else (匹配不上其他条件后匹配else)
    (else的动作)
    fi (条件语句的结束)

    6、while无限循环格式:

    #! /bin/bash
    while :
    do(循环语句的开始)
    …… (需要循环的命令)
    done(循环语句的结束)
     
    #! /bin/bash
    while true
    do(循环语句的开始)
    …… (需要循环的命令)
    done(循环语句的结束)

     7、until 循环格式:

    until执行一系列的操作直至条件为真时停止.条件可以为任意测试条件,并且测试发生在循环末尾。因此至少执行一次。
    until (循环条件)
    do (循环语句的开始)
    …… (需要循环的命令)
    done (循环语句的结束)

    8、printf转义序列:

     
    a
    警告字符,通常为ASCII的BEL字符
    
    后退
    c
    抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
    f
    换页(formfeed)
    换行
    回车(Carriage return)
    水平制表符
    v
    垂直制表符
    \
    一个字面上的反斜杠字符
    ddd
    表示1到3位数八进制值的字符,仅在格式字符串中有效
    ddd
    表示1到3位的八进制值字符

    9、bash脚本命令

    命令解释
    source a.sh
    执行shlle脚本a.sh
     
    ./a.sh执行shell脚本a.sh
    前提:有执行权限足够
    执行权限添加:chmod U+x a.sh
     
    env查看全部环境变量 
    export添加环境变量 
    expr添加本地变量 
    read用户手动赋值 
    read -p“提示是信息”用户手动进行赋值,引号里面加的是提示信息 
    pstree查看进程树 
    sh -n后面跟shlle脚本文件名,检查编辑的shlle脚本是否有语法错误 
    let做算术运算let a=$i+1
    运算$i+1的值赋给a
    break跳出当前循环 
    echo $?测试上条命令是否成功,回显0为成功,回显其他都为失败 

    10、bach脚本参数

    命令解释
    -ge
     大于或等于 
    -gt
     大于 
    -le
     小于或等于 
    -lt
     小于 
    -eq
     等于 
    -f
     判断文件是否存在#! /bin/bash
    if [ -f $a.out ]
    then
    echo $a.out
    fi
    -d
     判断目录是否存在#! /bin/bash
    if [ -d $aaa ]
    then
    echo $a.out
  • 相关阅读:
    hdu 1527威佐夫博弈
    hdu 1506
    hdu 1878 欧拉回路
    欧拉回路知识
    hdu 2545 并查集 树上战争
    hdu 2594 kmp
    hdu 1867 kmp匹配
    hdu 2844 多重背包二进制优化
    hdu 4006
    1047
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719368.html
Copyright © 2020-2023  润新知