zoukankan      html  css  js  c++  java
  • 菜鸟教程之学习Shell script笔记(中)

    菜鸟教程Shell script学习笔记(中)

    以下内容是学习菜鸟教程之shell教程,所整理的笔记

    菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.html

    Shell基本运算符

    注意: 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    #!/bin/bash
    val=`expr 2 + 2`
    echo "两个数之和为:$val"
    运行实例:
    两数之和为:4
    
    注意:表达式和运算符之间哟要有空格,这与我们熟悉的大部分编程语言不一样
    
    % 取余 `expr $b % $a`
    == 相等,用于比较两个数字,相同则返回true [$a == $b] 返回false
    != 不相等,用于比较两个数字,不相同则返回true {$ != $b}返回true
    
    注意:条件表达式要放在方括号之间,并且要有空格。
    
    • 关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    常见的关系运算符:
    设a为10,b为20
    -eq 检测两个数是否相等,相等则返回true [$a -eq  $b]返回false
    -ne 检测两数是否不相等,不相等则返回true [$a -ne $b]返回true
    -gt 检测左边的数是否大于右边,如果是,则返回true [$a -gt $b]返回false
    -lt 检测左边的数是否小于右边,如果是,则返回true [$a -lt $b]返回true
    -ge 检测左边的数是否大于等于右边,如果是,则返回true [$a -ge $b]返回false
    -le 检测左边的数是否小于等于右边,如果是,则返回true [$a -le $b]返回true
    
    • 布尔运算符
    常见的布尔运算符:
    假定变量a为10,变量b为20
    ! 非运算,表达式为true则返回false,否则返回true [!false]返回true
    -o 或运算,有一个表达式为true则返回true [$a -lt 20 -o $b -gt 100]返回true
    -a 与运算,两个表达式都为true才返回true [$a -lt 20 -a $b -gt 100]返回false
    
    • 逻辑运算符
    shell的逻辑运算符:
    假设变量a为10,变量b为20
    && 逻辑的and [[$a -lt $b -gt 100]]返回false
    || 逻辑的or ][[$a -lt 100 || $b -gt 100]]返回true
    
    • 字符串运算符
    常见的字符串运算符:
    假设变量a为"abc",变量b为"efg"
    -z 检测字符串长度是否为0,为0返回ture [-z"$a"]返回false
    -n 检测字符串长度是否为0,不为0返回true [-n"$"]返回true
    str 检测字符串是否为空,不为空返回true [$a]返回true
    
    • 文件测试运算符
    文件测试符用于检测unix文件的各种属性
    属性检测描述如下
    -b file 检测文件是否是块设备文件,如果是,则返回true [-b $file]返回false
    -c file 检测文件是复活是字符设备文件,如果是,则放回true [-c $file]返回false
    -d file 检测文件是否是目录,如果是,则返回true [-d $file]返回false
    -f file 检测文件是否是普通文件(即不是目录,也不是设备文件),如果是,则放回true [-f $file]返回true
    -g file 检测文件是否设置了SGID位,如果是,则返回true [-g $file]返回fasle
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true [-k $file]返回false
    -p file 检测文件是否是有名管道,如果是,则返回true [-p $file]返回false
    -u file 检测文件是否设置了SUID位,如果是,则返回true [-u $file]返回false
    -w file 检测文件是否科协,如果是,则返回true [-w $file]返回true
    -x file 检测文件是否可执行,如果是,则返回true [-x $file]返回true
    -s file 检测文件是否为空(文件大小是否大于0),不为空返回true [-s $file]返回true
    -e file 检测文件(包括目录)是否存在,如果是,则返回true [-e $file]返回true
    

    Shell echo命令

    Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。

    • 显示普通字符
      echo "It is a test" #双引号可省略 效果一样
    • 显示转义字符
      用转义,显示后面的字符 echo ""It is a test"" 输出:"It is a test"
    • 显示变量
    read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
    #!/bin/sh
    read name
    echo "$name It is a test"
    
    • 显示换行
    -n 显示换行 菜鸟上面显示-e开启转义,是错误的。
    echo -e "ok! 
    "
    echo  "It is a test"
    输出:
    -e ok!
    
    It is a test
    
    • c 显示不换行
    • 显示结果并写入文件
      echo "It is a test" > mylife
    • 原样输出字符串,不进行转义或取变量(用单引号)
    echo '$name"'
    输出:
    $name"
    
    • xxx显示命令执行结果
      echo date

    Shell printf命令

    printf 由 POSIX 标准所定义,使用printf的脚本比echo移植性好。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 。

    • printf命令的语法:
    printf format-string [arguments]
    format-string:为格式控制字符串
    arguments:为参数列表
    eg:
    #!/bin/bash
    printf "%-10s %-8s %-4s
    " 姓名 性别 体重kg
    printf "%-10s %-8s %-4.2f
    " 郭靖 男 66.1234
    printf "%-10s %-8s %-4.2f
    " 杨过 男 48.6543
    printf "%-10s %-8s %-4.3f
    " 郭芙 女 47.9876
    执行脚本 输出如下
    ...
    %s %c %d %f都是格式替代符
    %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
    %-4.2f 指格式化为小数,其中.2指保留2位小数。
    思考教程上例题:
    教程上例题源码:
    #!/bin/bash
    printf "%d %s
    " 1 "abc"
    printf '%d %s
    ' 1 "abc"
    printf %s abcdef
    printf %s abc def
    printf "%s
    " abc def
    printf "%s %s %s
    " a b c d e f g h i j
    printf "%s and %d 
    "
    执行结果:
    1 abc
    1 abc
    abcdefabcdefabc
    def
    a b c
    d e f
    g h i
    j  
     and 0
    以上结果我认为有误:
    为什么 单个printf %s abcdef 输出的是abcdef 而不是abcdefabcdefabc
    
    • printf的格式指示符
    %b 相应的参数被视为有要处理的转义序列的字符串
    %c ASCLL字符,显示相对应参数的第一个字符 
    %d,%i 十进制整数 
    %e 浮点格式 
    %E 浮点格式 
    %f 浮点格式 
    %g %e或%f转换,看哪个比较短,则删除结尾的零 
    %G %E或%f转换,看哪个比较短,则删除结尾的零 
    %o 不带正负号的八进制转换 
    %s 字符串格式 
    %u 不带正负号的十进制值 
    %x 不带正负号的十六进制。使用a至f表示10至15 
    %X 不带正负号的十六进制。使用A至F表示10至15 
    %% 字面意义的%
    
    • printf的转义序列
    a 警告字符,通常为ASCII的BEL字符 
     后退(一位) 
    c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 
    f 换页(formfeed) 
    
     换行 
    
     回车(Carriage return) 
    	 水平制表符 
    v 垂直制表符 
     一个字面上的反斜杠字符 
    ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效 
    ddd 表示1到3位的八进制的字符,仅在格式字符串中有效
    eg:
    printf "a string, no processing:<%s>
    " "A
    B"
    printf "a string, no processing:<%b>
    " "A
    B"
    printf "www.baiduu.com a"
    

    Shell test命令

    Shell中的test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

    • 数值测试
    -eq 等于则为真
    -ne 不等于则为真
    -gt 大于则为真
    -ge 大于等于则为真
    -lt 小于则为真
    -le 小于等于则为真
    eg:
    num1=100
    num2=100
    if test $[num1] -eq $[num2]
    then
        echo '两个数相等!'
    else
        echo '两个数不相等!'
    fi
    
    代码中的[]执行基本的算数运算,如:
    #!/bin/bash
    a=5
    b=6
    result=$[a+b] #注意等号两边不能有空格
    echo "result 为:$result"
    
    • 字符串测试
    = 等于则为真
    != 不相等则为真
    -z字符串 字符串的长度为零则为真
    -n字符串 字符串的长度不为零则为真
    eg:
    num1="test"
    num2="test2"
    if test $num1 = $num2
    then
        echo '两个字符串相等!'
    else
        echo '两个字符串不相等'
    fi
    
    • 文件测试
    -e文件名 如果文件存在则为真
    -r文件名 如果文件存在且可读则为真
    -w文件名 如果文件存在且可写则为真
    -x文件名 如果文件存在且可执行则为真
    -s文件名 如果文件存在且至少有一个字符则为真
    -d文件名 如果文件存在且为目录则为真
    -f文件名 如果文件存在且为普通文件则为真
    -c文件名 如果文件存在且为字符型特殊文件则为真
    -b文件名 如果文件存在且为块文件则为真
    eg:
    #!/bin/bash
    cd /bin
    if test -e ./bash
    then
        echo '文件已经存在'
    else
        echo '文件不存在'
    fi
    另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。例如:
    #!/bin/bash
    cd /bin
    if test -e ./notFile -o -e ./bash
    then
        echo '至少有一个文件存在!'
    else
        echo '两个都不存在!'
    fi
    
  • 相关阅读:
    C++中的头文件和源文件
    串口VMIN VTIME 详解
    lms111,rplidar 方向和起始角
    Nginx访问限制配置
    Nginx请求限制配置
    Nginx模块详解
    Nginx默认配置语法
    Nginx编译参数详解
    Nginx安装目录详解
    Nginx的快速安装
  • 原文地址:https://www.cnblogs.com/hudunkey/p/10279778.html
Copyright © 2011-2022 走看看