zoukankan      html  css  js  c++  java
  • shell

    https://blog.csdn.net/u012421852/article/details/51813411

    https://www.cnblogs.com/wjoyxt/p/4815782.html

    https://www.jianshu.com/p/2237f029c385

    #!/bin/bash
    [ ! -d /opt/tts ] && mkdir -p /opt/tts

    $()和${}

    1、在 bash shell 中,$()是将括号内命令的执行结果赋值给变量:

    2、${} 是用来作变量替换。一般情况下,$var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围:

    $[] 和 $(())

    它们是一样的,都是进行数学运算的。支持+ - * / %:分别为 “加、减、乘、除、取模”。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的

    3、${ } 的一些特殊功能:

    假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt

    ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
    ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
    ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
    ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
    
    记忆的方法为:
    # 是去掉左边(在鉴盘上 # 在 $ 之左边)
    % 是去掉右边(在鉴盘上 % 在 $ 之右边)
    单一符号是最小匹配﹔两个符号是最大匹配。
    ${file#/}(不加*号)表示只去掉最左边的/

    常用的命令展示


      chatter: 锁定文件,不能删除,不能更改
            +a:  只能给文件添加内容,但是删除不了,
                  chattr +a  /etc/passwd
            -d:      不可删除
            加锁:chattr +i  /etc/passwd       文件不能删除,不能更改,不能移动
            查看加锁: lsattr /etc/passwd      文件加了一个参数 i 表示锁定
            解锁:chattr -i /home/omd/h.txt    - 表示解除
            隐藏chattr命令:

    1
    2
    3
    4
    5
    which chattr
    mv /usr/bin/chattr  /opt/ftl/
    cd /opt/ftl/ 
    mv chattr h    -->更改命令,使用别名h隐藏身份
    /opt/ftl/h +i /home/omd/h.txt   -->利用h 行驶chattr命令
    1
    lsattr /home/omd/h.txt    -->查看加密信息

    恢复隐藏命令

    1
    2
    3
    mv h /usr/bin/chattr
    chattr -i /home/omd/h.txt
    lsattr /home/omd/h.txt
     
    #!/bin/sh
    if [ "$1" ];then
            IDC_CODE=$1
    fi
    Red_Error(){ echo '================================================='; printf '33[1;31;40m%b33[0m ' "$1"; exit 0; } is64bit=$(getconf LONG_BIT) if [ "${is64bit}" != '64' ];then Red_Error "抱歉, 7.x不支持32位系统, 请使用64位系统或安装宝塔5.9!"; fi
    isPy26=$(python -V 2>&1|grep '2.6.')
    if [ "${isPy26}" ];then
            Red_Error "抱歉, 7.x不支持Centos6.x,请安装Centos7或安装宝塔5.9";
    fi

    0表示标准输入
    1表示标准输出
    2表示标准错误输出
    > 默认为标准输出重定向,与 1> 相同
    2>&1 标准错误输出 重定向到 标准输出.
    &>file 标准输出 和 标准错误输出 都重定向到文件file中

    在使用通道的时候,如$ ls | grep "a.out",中的"|"管道符,是由系统完成了ls的输出 作为grep的输入,由于|接收的是来自标准输出流作为自己的输入,所以ls的输出是标准输出(1)。 从这可以知道,如果在shell命令终端要将一个COMMOND的输出作为|的输入,就需要分类情况,如下所示:

    情况1:如果COMMOND的输出为标准输出(1),则可以如下使用通道"|"
    $COMMOND | grep "a.out"

    情况2:如果COMMOND的输出为标准错误输出(2),则可以如下使用通道"|"
    $COMMOND 2>&1 | grep "a.out"

    如上所示:先将 COMMOND的标准错误输出(2)重定向到标准输出(1),然后就可以使用通道"|"了

    现在问题来了,对于给出的一个shell命令,我们有的不知道其输出是标准错误输出还是标准输出,所以有没有方法来确定此shell命令的输出是2还是1呢?,答案:可以使用strace跟踪此shell命令的write调用就可以了,如果write的第一个参数是1则此shell命令的输出就是标准输出,如果write的第一个参数是2则此shell命令的输出就是错误输出。

    2. 请用strace确定ls的输出是标准输出(1)

    $strace -e trace=write ls

    getconf

    我们时常需要查询系统相关的信息,比如页面大小,整数大小之类,如果编写程序去计算会比较繁琐,这里有一个很有用的命令,可以用来获取系统相关信息。它就是getconf。

    getconf 用途将系统配置变量值写入标准输出,比如:

      getconf PAGE_SIZE 查看系统内存分页大小

      getconf LONG_BIT 看linux是32位还是64位最简单的方法

      getconf -a 查看全部系统变量

     

    $ getconf PAGE_SIZE

    4096

    $ getconf INT_MAX

    2147483647

    $ getconf LONG_BIT

    64

    7.原样输出字符串,不进行转义或取变量(用单引号)

    echo '$name"'

    输出结果:

    $name"

    8.显示命令执行结果

    echo `date`

    printf

    #!/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.2f
    " 郭芙 女 47.9876
    

    执行脚本,输出结果如下所示:

    姓名     性别   体重kg
    郭靖           66.12
    杨过           48.65
    郭芙           47.99


    %s %c %d %f都是格式替代符

    %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

    %-4.2f 指格式化为小数,其中.2指保留2位小数。

    更多实例:

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
     
    # format-string为双引号
    printf "%d %s
    " 1 "abc"
    
    # 单引号与双引号效果一样 
    printf '%d %s
    ' 1 "abc" 
    
    # 没有引号也可以输出
    printf %s abcdef
    
    # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
    printf %s abc def
    
    printf "%s
    " abc def
    
    printf "%s %s %s
    " a b c d e f g h i j
    
    # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
    printf "%s and %d 
    "

    执行脚本,输出结果如下所示:

    1 abc
    1 abc
    abcdefabcdefabc
    def
    a b c
    d e f
    g h i
    j  
     and 0

    数值测试

    参数说明
    -eq 等于则为真
    -ne 不等于则为真
    -gt 大于则为真
    -ge 大于等于则为真
    -lt 小于则为真
    -le 小于等于则为真

    实例演示:

    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"

    结果为:

    result 为: 11

    字符串测试

    参数说明
    = 等于则为真
    != 不相等则为真
    -z 字符串 字符串的长度为零则为真
    -n 字符串 字符串的长度不为零则为真

    实例演示:

    num1="ru1noob"
    num2="runoob"
    if test $num1 = $num2
    then
        echo '两个字符串相等!'
    else
        echo '两个字符串不相等!'
    fi

    输出结果:

    两个字符串不相等!

    文件测试

    参数说明
    -e 文件名 如果文件存在则为真
    -r 文件名 如果文件存在且可读则为真
    -w 文件名 如果文件存在且可写则为真
    -x 文件名 如果文件存在且可执行则为真
    -s 文件名 如果文件存在且至少有一个字符则为真
    -d 文件名 如果文件存在且为目录则为真
    -f 文件名 如果文件存在且为普通文件则为真
    -c 文件名 如果文件存在且为字符型特殊文件则为真
    -b 文件名 如果文件存在且为块特殊文件则为真

    实例演示:

    cd /bin
    if test -e ./bash
    then
        echo '文件已存在!'
    else
        echo '文件不存在!'
    fi

    输出结果:

    文件已存在!

    另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。例如:

    cd /bin
    if test -e ./notFile -o -e ./bash
    then
        echo '至少有一个文件存在!'
    else
        echo '两个文件都不存在'
    fi

    输出结果:

    至少有一个文件存在!


     
  • 相关阅读:
    Python Django开发遇到的坑(版本不匹配)
    Mysql安装与问题合集
    git branch -r查看不了远程所有分支
    angularJS使用$http请求下载excel表格
    遍历formData对象数据
    按需使用CryptoJS之AES加密(CFB)模式
    git之创建、删除分支
    git pull时报错:Access Denied (拒绝访问)
    angularJS监听数据变化
    Angular-ui-router入门
  • 原文地址:https://www.cnblogs.com/linuxws/p/12706046.html
Copyright © 2011-2022 走看看