美文网首页
Shell学习(一)

Shell学习(一)

作者: 苦行小哥哥 | 来源:发表于2019-03-06 09:56 被阅读1次

    title: shell学习(一)
    time: 2018.3.1 星期五 16:11


    变量

    1. 变量与变量的内容以 '=' 来连接。
    2. 等号两边都不能直接接空格。
    3. 变量命名要求 ,不能以数字开头,由数字和英文字母组成。
    4. 有空格符可以以单引号或者双引号将变量内容结合起来。
      • 双引号内的特殊字符如 $ 可以保持原来的1意思。
      • 单引号内的特殊字符则仅为一般字符(纯文本)。
    5. 可用转义字符 ’\‘ 将特殊符号转义为1一般字符.
    6. 在一串命令中需要通过其他命令提供的信息。可使用反单引号或者$ ;反单引号为键盘上方的数字键盘1左边的按键。
    7. 若变量为了增加变量的内容。可使用 ‘$变量名称’ 或者 ’${变量名称}‘累加内容,以:作为后缀。
    8. export 使变量成为环境变量。
    9. unset 取消设置环境变量A

    查看自己的系统支持哪些shell

        /etc/shell
    

    传递参数

    • $0 执行的文件名字
    • 向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符显示所有向脚本传递的参数
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $- 显示当前shell使用的当前选项
    $? 显示最后命令的退出状态 0 表示没有任何错误。其他任何值表明有错误。

    * 与@ 不同:前者 “1,2,3” 后者 “1”,“2”,“3”

    数组

    • 定义
    array_name={value0,value1...}
    
    • 引用
    ${array_name[index]}
    
    • 数组长度
    ${#array_name[*]}
    ${#array_name[@]}
    

    基本运算符

    算术运算符

    • expr 使用反引号 不是单引号
     val=`expr 2 + 2`   #两个数相加 + 号左右要有空格
    
    • 算术运算符
      • , -, * , / ,%, = , ==, !==
        乘号 * 需要 反斜号 \ 转义
    • == 与 !=
    $a == $b
    
    $a != $b
    

    关系运算符

    • 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    运算符 说明
    -eq 两个数是否相等
    -ne 两个数是否不相等
    -gt 检测左边的数是否大于右边的
    - lt 检测左边的数是否小于右边的
    -ge 检测左边的数是否大于等于右边的
    -le 检测左边的数是否小于等于右边的
     $a -eq $b
    

    布尔运算符

    运算符 说明
    ! 非运算
    -o 或运算
    -a 与运算

    逻辑运算符

    运算符 说明
    && 逻辑的AND
    || 逻辑的OR

    字符串运算符

    运算符 说明
    = 两个字符串是否相等
    != 两个字符串是否不相等
    -z 检测字符串是否长度为0 为0 返回 true
    -n 检测字符串是否长度为0 不为0 返回 true
    $ 检测字符串是否为空 不为空返回true

    文件测试运算符

    操作符 说明
    -b file 检测文件是否是块设备文件 是返回true
    -c file 检测文件是否为字符设备文件 是返回true
    -d file 检测文件是否是目录 是返回true
    -f file 检测文件是否为普通文件(不是目录 也不是设备文件)是 返回 true
    -g file 检测文件是否设置了 SGID位 是返回true
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
    -p file 检测文件是否是有名管道,如果是,则返回 true。
    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。
    -r file 文件是否可读
    -w file 文件是否可写
    -x file 文件是否可执行
    -s file 文件是否为空
    -e file 检测文件(目录)是否存在 是返回true

    echo

    #显示换行
    echo -e "hello \n"
    
    #显示不换行
    echo -e "hello \c"  #-e 开启转义 \c 不换行
    
    #显示结果定向至文件
    echo "hello" > file
    
    #原样输出字符串 不进行转义或取变量 用单引号
    echo ' string'
    
    #显示命令执行结果 用反引号
    echo `date`
    

    printf

    • 格式
    printf format-string [arguments.....]
    
    • 类比c语言printf 多一个 - 指定对齐方式
    printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
    - 表示左对齐 没有则右对齐
    printf "%d %s\n" 1 "abc"
    # 单引号和双引号一样
    # 没有引号也可以输出
    
    
    • printf的转义序列
    序列 说明
    \a 警告字符,通常为ASCII的BEL字符
    \b 后退
    \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
    \f 换页(formfeed)
    \n 换行
    \r 回车(Carriage return)
    \t 水平制表符
    \v 垂直制表符
    \ 一个字面上的反斜杠字符
    \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
    \0ddd 表示1到3位的八进制值字符

    test 命令

    if test $a 
    

    流程控制

    • if else
    if condition
    then
             command1
    elseif condition2
    then 
            command2
    else
             command3
    fi
    
    • for 循环
    for var in item1,item2...itemN
    do 
         command1
        command1
    done
    
    • while
    while condition
    do
          command
    done
    

    -until 循环 直到条件为true为止

    until  condition
    do
        command
    done
    

    -case 多选择语句

    case 值 in
    模式一)
             command1
              ;;
    模式二)
              command2
               ;;
    *)
               command3
                ;;
    esac
    

    -break
    允许跳出所有循环

    • continue
      跳出当前循环

    shell函数

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }
    
    • 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 n 的形式来获取参数的值,例如,1表示第一个参数,$2表示第二个参数...
    • 调用 funName 1 2 3

    shell 输入/输出重定向

    命令 说明
    command > file 将输出重定向到 file。
    command < file 将输入重定向到 file。
    command >> file 将输出以追加的方式重定向到 file。
    n > file 将文件描述符为 n 的文件重定向到 file。
    n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
    n >& m 将输出文件 m 和 n 合并。

    n <& m 将输入文件 m 和 n 合并。
    << tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

    • 需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
    • here Document
    command << delimiter
        document
    delimiter
    

    shell 文件包含

     使用 . 号来引用test1.sh 文件
     ./test1.sh
    

    相关文章

      网友评论

          本文标题:Shell学习(一)

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