美文网首页
Shell编程基础(一)

Shell编程基础(一)

作者: JM68 | 来源:发表于2018-04-23 11:22 被阅读0次

    Shell脚本编程基础


    shell概念:

    shell是一个用C语言编写的程序,他是用户使用Linux的桥梁,它是一种命令语言,同事也是一种编程语言.用户可以通过Shell访问操作系统和内核服务.Linux的Shell种类众多,Bash是大多数Linux系统默认的Shell,所以我以Bash为例学习shell脚本编程.


    shell变量:

    变量的命名

    1. 命名只能使用,字母/数字/下划线
    2. 中间不能有空格
    3. 不能使用标点符号
    4. 不能与关键字重合

    变量操作

    1. 使用: $变量名 或者 ${变量名}
    #!/bin/bash            # 表示为bash的shell  也可以写成#!/bin/sh
    a=4
    b=5
    c=`expr $a + $b`
    echo $c
    
    1. 设置只读变量: 变量名 readonly
    2. 删除变量: unset 变量名
    3. 变量的赋值用'=',需要注意的是等号两边不要有空格,比如a=1是对的,但是a = 1或a= 1都是错的,'command not found'

    变量的分类

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

    特殊变量
    有些变量是一开始执行脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量
    $* 这个程序的所有参数
    $# 这个程序的参数个数
    $$ 这个程序的PID
    $! 执行上一个后台程序的PID
    $? 执行上一个指令的返回值


    shell中常用数据类型

    1. 字符串:
    • 可以使用单引号也可以使用双引号,单引号表示原样字符串,单引号中变量或者转义符都会无效,单引号里也不能出现单引号;
    • 提取字符串长度 ${#变量名}
    • 字符串切片 ${变量名:开始位置:结束位置}

    str1='abc'
    str2="$str1"
    str3='$str1'
    echo $str1 $str2 $str3 #输出abc abc $str1
    echo ${#str1} #输出3
    echo ${str1:1:2} #输出bc 开始位置1 结束位置2 编程语言中一般都是以0是开始的

    1. 数组:
    • 数组的定义: 变量名=(值1 值2... 值n)
    • 数组的读取: ${变量名[下标]} 或 取所有元素用${变量名[@]}
    • 数组的长度: ${#变量名}

    array1=(1 3 5 7 9) #注意数组中每个值用空格隔开而不是逗号
    echo $array1 #输出1 默认下标0
    echo ${array[4]} #输出9
    echo ${array1[@]} #输出1 3 5 7 9
    echo ${#array1[@]} #输出5
    echo ${#array1} # 输出1 取的是单个元素 默认的下标是0 单个元素长度为1

    1. 注释:
    • 以#开头的就是注释,会被解释器直接忽略

    shell传参

    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $$ 脚本运行的当前进程PID号
    $! 后台运行的最后一个进程的PID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    shell运算符

    • 由于原生bash不支持简单的数学运算,但是可以通过其他命令实现,例如awk/expr,其中expr最常用,expr是一款表达式计算工具,使用时要用撇号`包起来(撇号就是键盘上1左边的那个),而且需要注意的是它有严格的语法规范,表达式与运算符之间一定要有空格!例如`expr $a + $b`是对的,但是`expr $a+$b`是错误的!
    1. 算数运算符:
    运算符 说明 举例
    + 加法 `expr $a + $b`
    - 减法 `expr $a - $b`
    * 乘法 `expr $a * $b`
    / 整除法 `expr $a / $b` 如`expr 8 / 3`结果为2
    % 取余 `expr $a % $b`
    = 赋值 a=$b
    == 相等 $a == $b 判断是否相等 相等返回true 不相等返回false
    != 不相等 $a != $b 相等返回false 不相等返回true

    1. 关系运算符
      关系运算符只支持数字,不支持字符串,除非字符串的值是数字.
    运算符 说明
    -eq 检测两个数是否相等,相等返回true
    -ne 检测两个数是否不等于,不等返回true
    -gt 检测左边的数是否大于右边的,是就返回true
    -lt 检测左边的数是否小于右边的,是就返回true
    -ge 检测左边的数是否大于等于右边的,是就返回true
    -le 检测左边的数是否小于等于右边的,是就返回true
    1. 布尔运算:

    ! : 非运算符,[!true] 返回false
    -o: 或运算符,任一true 返回true
    -a: 与运算符,任一为false 返回false

    1. 逻辑运算符:

    && 逻辑的AND
    || 逻辑的OR

    1. 字符串运算符

    = 检测两个字符串是否相等,相等返回 true
    != 检测两个字符串是否相等,不相等返回 true
    -z 检测字符串长度是否为0,为0返回 true
    -n 检测字符串长度是否为0,不为0返回 true
    str 检测字符串是否为空,不为空返回 true 举例 a='abc' [$a]返回ture


    shell命令

    1. shell echo命令: 用于字符串的输出
    • echo abc 和 echo "abc" 是一样的

    • 可以显示普通字符串\转义字符\变量

    echo "Hello world" #返回Hello world
    text="Hello world"
    echo $text #返回Hello world
    echo "Hello world"#返回"Hello world"

    • 可以定向至文件
      echo "Hello world" > test.log 会将"Hello world"定向输出到test.log中

    • 可以显示命令执行结果
      echo `data` #注意是撇号,结果将显示目前的日期
      echo `expr 2 + 3` #执行结果5

    1. shell printf命令:
    • 可以格式化字符串输出 格式替代符(%s %c %d %f)
    • 可以转义序列
    \a 警告字符
    \b 后退
    \c 抑制,结尾不换行且后面的格式字符串中的字符都会被忽略
    \f 换页
    \n 换行
    \r 回车
    \t 水平制表符
    \v 垂直制表符
    \ 一个 \
    1. shell test命令:
      test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。格式为 test 条件语句
    • 测试字符串

    test str1==str2 测试两个字符串是否相同
    test str1 !=str2 测试两个字符串是否不同
    test str1 测试是否为字符创
    test -n str1或test -z str1 测试是否为空的字符串

    • 测试整数

    test int1 -eq int2 测试是否相等
    test int1 -ne int2 测试是否不等
    test int1 -le int2 测试是否小于等于
    test int1 -lt int2 测试是否小于
    test int1 -ge int2 测试是否大于等于
    test int1 -gt int2 测试是否大于

    • 测试文件

    test -d file 测试是否为目录
    test -f file 测试是否为文件
    test -x file 测试是否是可执行文件
    test -r file 测试是否是可读文件
    test -w file 测试是否是可写文件
    test -e file 测试文件是否存在
    test -s file 测试文件是否为空
    可简写 如 test -x file 可简写为 [ -x file ] 注意中括号旁一定加空格把执行命令括起来


    shell 循环与分支

    1. 分支: if 和 if else 和 if elif else
    if 条件语句
    then
        条件为真执行语句
    fi
    也可以这样写为一行:if 条件语句; then 条件为真执行语句;fi   
    下面同理要么换行要么用';'
    
    if 条件语句
    then 
        条件为真执行语句
    else
        条件为假执行语句
    fi
    
    if 条件1语句
    then
        条件1为真执行语句
    elif 条件2语句
    then
        条件2为真执行语句
    else
        条件1与条件2都为假执行语句
    fi
    
    1. 循环语句: for循环 while循环 until循环 case循环
      跳出循环break 跳出本次循环 continue
    举例说明:返回0到100的整数和
    #! /bin/bash
    sum=0
    for ((i=0; i<=100; i++))
    do
        sum=`expr $sum + $i`
    done
    echo $sum  #返回5050
    
    #! /bin/bash
    i=0
    while(($i<=3))
    do
        echo $i
        let "i++"
    done
    运行脚本,输出:
    0
    1
    2
    3
    

    相关文章

      网友评论

          本文标题:Shell编程基础(一)

          本文链接:https://www.haomeiwen.com/subject/qhbklftx.html