linux shell 脚本攻略笔记

 最近对linux shell脚本攻略这本书过了一遍,对里面的一些命令和技巧做了些笔记,供以后参考使用
一、环境变量
    1、修改登录提示符显示格式
    临时修改:键入 export PS1='[\u@\H \w]\$ ',回车,修改环境变量 PS1。注意,命令区分大小写和空格。
    永久生效:可以在/etc/bashrc、~/.bash_profile等环境变量配置文件中指定PS1的参数,默认是为[\u@\h \W]\$
    PS1 是系统内置的环境变量名,其包含选项意义为:
    \u :#当前用户的账号名称  
    \w :#完整的工作目录名称。家目录会以 ~代替   
    \W :#短路径,利用basename取得工作目录名称,所以只会列出最后一个目录,默认。
    \H :#完整的主机名称。   
    \h :#表示短主机名,默认。仅取主机的第一个名字,如hosts配置主机名为node1,node1.localhost,后者则被省略   
    \d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"   
    \t :#显示时间为24小时格式,如:HH:MM:SS   
    \T :#显示时间为12小时格式   
    \A :#显示时间为24小时格式:HH:MM   
    \v :#BASH的版本信息   
    \# :#下达的第几个命令   
    \$ :#提示字符,普通用户显示为字符$, root 用户显示为字符#
    除此之外,其余的 [ 、@ 、] 和空格字符按原样显示。
    可以通过设置输出颜色区别提示符,具体设置方式如下:
    aa=`echo -e "\e[31m"`
    bb=`echo -e "\e[0m"`
    export PS1='$aa[\u@\H \w]\$ $bb'

   2、查看当前环境变量
    进程环境变量:/proc/${PID}/environ
        [root@node1 ~]# cat /proc/5472/environ
    当前环境变量:env
       
二、格式化输出
    1、printf
    printf    [选项]    [参数]
    选项:
    参数:指定输出格式和输出内容
    格式控制主要由"% - 0 m.n l或h 格式字符"几个部分组成,其中%:表示格式说明的起始符号,不可缺少。-:有-表示左对齐输出,如省略表示右对齐输出。0:有0表示指定空位填0,如省略表示指定空位不填。m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
    示例:
    #!/bin/bash
    printf "%-5s %-10s %-4s\n" NO Name Mark
    printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
    printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345
    printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323
    ##%-5s含义解释为:%号表示格式输出开始,-代表左对齐,5表示输出字符占用有5个字符,如不足则右侧补充空格(左对齐右侧补,右对齐左侧补充空格),如果超出5则按实际输出,s表示输出内容以字符形式展示。%4.2f含义解释为:%表示输出格式开始,4表示输出4位数,.2表示精确到两位小数,f表示浮点数显示。
    格式替代符:
    %b 相对应的参数被视为含有要被处理的转义序列之字符串。
    %c ASCII字符。显示相对应参数的第一个字符
    %d, %i 十进制整数
    %e, %E, %f 浮点格式
    %g %e或%f转换,看哪一个较短,则删除结尾的零
    %G %E或%f转换,看哪一个较短,则删除结尾的零
    %o 不带正负号的八进制值
    %s 字符串
    %u 不带正负号的十进制值
    %x 不带正负号的十六进制值,使用a至f表示10至15
    %X 不带正负号的十六进制值,使用A至F表示10至15
    %% 字面意义的%

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

    2、echo
    echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
    echo -n :echo默认会加换行符\r,可以通过echo -n去掉末尾的换行符
    echo -e : 打开反斜杠ESC转义。若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
           \a 发出警告声;
           \b 删除前一个字符;
           \c 最后不加上换行符号;
           \f 换行但光标仍旧停留在原来的位置;
           \n 换行且光标移至行首;
           \r 光标移至行首,但不换行;
           \t 插入tab;
           \v 与\f相同;
           \\ 插入\字符;
           \nnn 插入nnn(八进制)所代表的ASCII字符;
       例如颜色输出、空格、回车、换行、tab输出等,其中颜色输出方式如下:
           [root@node1 shell]# echo -e "\e[1;31m hello \e[0m"   
        hello
       例如:echo -e "\033[44;37;5m ME\033[0m COOL"
       解释:"\033[44;37;5m ME "设置背景为蓝色,前景为白色,闪烁光标,输出字符“ME”;
           "\033[0m COOL"重新设置屏幕到缺省设置,输出字符 “COOL”。
           "e"是命令echo的一个可选项,它用于激活特殊字符的解析器。"\033"引导非常规字符序列(即"\033["表示终端转义字符开始,"\033"即退出键的ASCII码)。"m"意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是"44;37;5"和"0"。修改"44;37;5"可以生成不同颜色的组合,数值和编码的前后顺序没有关系。

       其中字体颜色重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
       背景色重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
      可以选择的编码如下所示(这些颜色是ANSI标准颜色):
          编码          颜色/动作
          0            重新设置属性到缺省设置
          1            设置粗体
          2            设置一半亮度(模拟彩色显示器的颜色)
          4            设置下划线(模拟彩色显示器的颜色)
          5            设置闪烁
          7            设置反向图象
          22           设置一般密度
          24           关闭下划线
          25           关闭闪烁
          27           关闭反向图象
          30           设置黑色前景
          31           设置红色前景
          32           设置绿色前景
          33           设置黄色前景
          34           设置蓝色前景
          35           设置紫色前景
          36           设置青色前景
          37           设置白色(灰色)前景
          38           在缺省的前景颜色上设置下划线
          39           在缺省的前景颜色上关闭下划线
          40           设置黑色背景
          41           设置红色背景
          42           设置绿色背景
          43           设置黄色背景
          44           设置蓝色背景
          45           设置紫色背景
          46           设置青色背景
          47           设置白色(灰色)背景
          49           设置缺省黑色背景
    其他有趣的代码还有:
          \033[2J      清除屏幕
          \033[0q      关闭所有的键盘指示灯
          \033[1q      设置"滚动锁定"指示灯(Scroll Lock)
          \033[2q      设置"数值锁定"指示灯(Num Lock)
          \033[3q      设置"大写锁定"指示灯(Caps Lock)
          \033[15:40H   把关闭移动到第15行,40列
          \007        发蜂鸣生beep

    一些说明:
        前景颜色各数字是对应背景颜色减去10。
        结束非常规字符序列的"m"要紧跟前面的数字,不能有空格。
        命令也可以写成echo -e "^[[44;37;5m ME \033[0m COOL",其中的"^["是先按Ctrl-V,然后再按键产生的。
        输出带有颜色的文本,echo命令必须带有选项"-e"。
    这种方法只能暂时改变echo命令输出的文本的样式,logout后就恢复为默认。修改.bashrc文件,可以修改默认的显示样式。
    如:在.bashrc文件的最后面追加一行:echo -e '\033[47;30m'。
    # 建议:在shell文件的最前面,将echo命令的输出样式定义成变量。
        # define echo terminal style
        # color: 0~6 --> black, red, green, yellow, blue, purple, cyan, grey
        export ECHO_STYLE_00="\033[0m"        # default style(black background, white foreground)
        export ECHO_STYLE_01="\033[41;33;1m"  # red background, yellow foregound bold
        echo -e "${ECHO_STYLE_01}echo command terminal style example${ECHO_STYLE_00}"

三、常用命令

    1、获取字符串长度:
    ${#var}
    [root@node1 ~]# aa=123456
    [root@node1 ~]# echo ${#aa}
    6

    $*  变量输出格式:"a b c"
    $@  变量输出格式:"a" "b" "c"
    $#  变量输出格式:3   (即变量个数)
    $$  变量返回进程号
    $?  变量返回上个命令执行结果是否成功(0成功,非0失败)
    $!  shell最后运行的后台pid
    $-  使用set设置的flag一览
    $0  shell本身文件名

    2、数学运算
    可以利用let (()) [] bc expr进行数学运算
    1)let计算
       [root@node1 ~]# let r=1+2
       [root@node1 ~]# echo $r
       3
    2)(())计算
       [root@node1 ~]# echo $((1+2))
       3
    3)[]计算
       [root@node1 ~]# echo $[1+2]
       3
    4)expr计算
       [root@node1 ~]# expr 1 + 2
       3
    5)bc高级运算
       [root@node1 ~]# echo "1+2" |bc
       3
       设定小数精度
       [root@node1 ~]# echo "scale=2;2/8"|bc
       .25
       设定进制转换
       [root@node1 ~]# echo "obase=2;1+1"|bc
       10
       计算平方
       [root@node1 ~]# echo "2^2"|bc    
       4
    3、文件描述符和重定向
    文件描述符是与文件输入和输出相关联的整数,可以利用$?判断上条命令是否执行成功(0成功,非0失败)。常见的有以下三类:
    stdin :标准输入 0
    stdout:标准输出 1
    stderr:标准错误 2
    
    cat <test.log
    xxx
    EOF
    
    自定义文件描述符创建:exec
    exec  4< test.log ;echo abc >test.log; cat <&4
    exec  5>test.log ;echo abc >&5 ;cat test.log
    exec  6>>test.log ;echo abc >&6 ;cat test.log
    exec 3>&1 4>&2 1>$LOG 2>&1
    4、数组
    定义数组:
    array_var=(1 2 3 4 5 6 )
    数组赋值:
    array_var[0]="test1"
    array_var[1]="test2"
    ...
    array_var[5]="test6"
    数组取值:
    echo ${array_var[0]}                  ##取出数组中单个值
    echo ${array_var[*]} 或者 echo ${array_var[@]}      ##取出数组中所有值
    echo ${#array_var[*]}                 ##取出数组元素个数
    echo ${!array_var[*]}                 ##列出数组索引编号
    5、终端信息获取
    tput和stty工具处理终端信息
    tput:
        tput cols        获取终端列数
        tput lines        获取终端行数
        tput longname    获取终端名称
            tput cup 10 8    将光标定位到10行8列处
        tput setb no       设置终端背景色,no可以设置为0-7
        tput serf no     设置终端前景色(文字颜色),no可以设置为0-7
        tput bold        设置文字加粗
        tput smu1        设置下划线起点
        tput rmu1        设置下划线
        tput ed        删除当前光标位置到行尾的所有内容
        tput sgr0        取消所有tput设置
    stty:
        stty -echo       禁止将输出显示在终端,一般用于密码输入
        stty echo
    6、脚本调试
    可以通过执行sh -x  test.sh做执行过程,也可以在shell脚本中通过设置 set -x ,set +x 做脚本区域调试,其中将!#/bin/bash改为!#/bin/bash -xv 表示进入debug模式
    7、函数和参数
    函数定义:
        function fname()
        {
        statements;
        }
    或者
        fname()
        {
        statements;
        }
    执行函数:
        fname;
        fname var01 var02 ;
    导出函数:(将函数用于子进程中)
        export -f fname
    8、read读入
    read -n num var            ##读取输入内容的前num个字符,将其保存到var中
    read -s var            ##静默输入,不显示输入变量内容
    read -p "参数出入:" var        ##显示输入信息,将输入保存到var变量中
    read -d ":" var            ##界定符为:结束输入行
    9、字段分隔符
    默认是空白字符(换行符、制表位、空格),可以通过IFS=改变字段分隔符
    10、循环
    while 循环语法:(给定条件为真,则执行循环)
        while condition
        do
        commands;
        done
    for 循环语法:
        for var in list;
        do
        commands;
        done
    或者
        for((i=0;i<10;i++))
        {
           commands;
        }
          until 循环语法:(给定条件为真,则跳出循环)
        until contition
        do
        commands;
        done
    11、比较与测试
    if语法:
        if condition;
        then
        command;
        fi
    或者
        if condition;
        then
        commands;
        else
        commands;
        fi
     或者
        if condition;
        then
        commands;
        else if condtion;
        then
        commands;
        else
        commands;
        fi
    算数比较:[]或者[[]]
        [ -gt ]      大于
        [ -lt ]    小于
        [ -ge ]    大于等于
        [ -le ]    小于等于
        [ -eq ]    等于
        [ -ne ]    不等于
    字符串比较:(最好使用[[]]代替[])
        [ $str1 == $str2 ]     等于
        [ $str1 != $str2 ]    不等于
        [ $str1 > $str2 ]     大于
        [ $str1 < $str2 ]     小于
        [ -z $str1 ]     如果str1是空字符串,则返回真
        [ -n $str1 ]     如果str1是非空字符串,则返回真

    文件系统相关测试:
        [ -f $var ]    给定变量包含正常文件路径或者文件名,则返回真
        [ -x $var ]    给定变量包含的文件可执行,则返回真
        [ -d $var ]    给定的变量包含是目录,则返回真
        [ -e $var ]    给定的变量包含文件存在,则返回真
        [ -c $var ]    给定的变量包含的是一个字符设备文件的路径,则返回真
        [ -b $var ]    给定的变量包含的是一个块设备文件的路径,则返回真
        [ -w $var ]    给定的变量包含的文件可写,则返回真
        [ -r $var ]    给定的变量包含的文件可读,则返回真
        [ -L $var ]    给定的变量好含一个字符连接,则返回真
    
    12、录制与回访终端会话
    script和scriptreplay
        script -t 2> timing.log -a output.session    ##将时序写入timing.log,会话命令写入output.session,错误日志也重定向到timing.log
        commands;        ##录制的命令
        exit        ##退出录制
    
       scriptreplay timing.log output.session  ##按时序回访录制

    多会话显示:
       terminal1: mkfifo scriptfifo
       terminal2: cat scriptfifo
       tarninal1: script -f scriptfifo
                  commands
       此时会话1输入的命令在会话2就能实时的显示出来,通过在会话1使用exit退出录制演示
    13、find命令查找文件
    find ./  -name/-type/-size/-iname  -exec command {} \; 其中{}是特殊字符串,匹配find找到的文件,以;表示comman命令的结束。\是转义符,
因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思。
    14、xargs
    多行输入转单行输出:cat aa|xargs
    单行输入转多行输出:cat aa|xargs -n 3  ##空格是列分隔符,可以通过-d指定列分隔符
    删除文件:find ./ -name *.txt -exec rm -rf {} \; 可以利用xargs替换,即find ./ -name *.txt |xargs rm -rf
    15、tr替换
    将 标准输入的字符进行替换、删除以及压缩,语法为tr [options] set1 set2
    将大写字母替换为小写字母:echo "ABCD EFGH" |tr 'A-Z' 'a-z'
    删除字符:tr -d 'xx'
    16、sort排序和uniq
    sort -nrk 2 file.txt    ##其中-n表示数字排序,-k 2表示第二列,-r表示逆序排序(降序)
    uniq -u        ##统计没有重复的行
    uniq -d        ##找出重复数据的行
    17、expect实现交互
    /usr/bin/expect
    spawn    指定需要自动化哪一个命令
    expect    提供需要等待的消息
    send    发送消息,\n换行
    expect eof   结束交互
    18、文件粘滞位设置
    设置粘滞位后,只有目录的所有者才能删除目录中的文件,即时有足够的权限用户也不能执行删除操作(root除外)
    chmod a+t file
    chattr +i file

三、正则表达式
    1、正则表达式特殊符号

    字符    含义
    c    匹配字符c
    .    匹配任意单个字符※※※
    *    匹配前一个字符出现0次或多次※※※
    .*    匹配任意多个字符※※※
    []    匹配集合中的任意单个字符,括号中为一个集合※
    [x-y]    匹配连续的字符串范围※
    ^    匹配字符串的开头※※※
    $    匹配字符串的结尾※※※
    [^]    匹配否定,对括号中的集合取反※※※
    \    转义后面的字符
    \{n,m\}    匹配前一个字符重复n到m次
    \{n,\}    匹配前一个字符重复至少n次
    \{n\}    匹配前一个字符n重复n次
    \(\)    将\(与\)之间的内容存储在保留空间,最大存储9个
    \n    通过\1到\9调用保留空间的内容


    字符    含义
    []    等同于基本正则表达式的\{n,m\}
    +    匹配前一个字符出现一次或多次
    ?    匹配前一个字符出现0次或一次
    |    匹配逻辑或者,即匹配前或后的字符串
    ()    匹配正则集合

    字符集        含义        字符集        含义
    [:alpha:]    字母字符    [:graph:]    非空格字符
    [:alnum:]    字母与数字字符    [:print:]    任何可以显示的字符
    [:cntrl:]    控制字符    [:space:]    任何产生空白的字符
    [:digit:]    数字字符    [:blank:]    空格与tab键字符
    [:xdigit:]    十六进制数字字符 [:lower:]    小写字符
    [:punct:]    标点符号    [:upper:]    大写字符

    2、grep
    grep -E     等同于egrep,使用扩展正则表达式
    grep -o        只输出匹配文本部分
    grep -v        排除过滤
    grep -c        统计匹配字符的行数
    grep -n        显示匹配行号
    grep -R        递归过滤,也可使用-r
    grep -i        忽略大小写
    grep -e .. -e ..多文本过滤
    grep abc  -A  3 显示包含abc行的后三行记录,共4行(至少)
    grep abc  -B  3 显示包含abc行的前三行记录,共4行(至少)
    grep abc  -C  3 显示包含abc行的前、后三行记录,共7行(至少)
    3、cut
    cut -f1,2 -d"," --complement    ##-f指定列号,-d指定列分隔符,--complement排除截取的列
    cut -cN-M    ##截取从N到M个字符,也可以设置-cN-,-c-M
    4、sed
    sed 's/pattern/replace_pattern/g' file    ##在file中查找pattern字符串,并用replace_pattern替换,其中g可以是1g,2g,Ng,表示从N个匹配的开始替换,/可以用其他符号#、;、|等代替,也可用\转义
    sed '/^$/d' file            ##删除文本空行
    echo "This is a test shell" |sed 's/\w\+/[&]/g'    ##正则表达式\w\+匹配每一个单词,[&]用以替换它,其中&表示之前匹配到的任意单词
    echo "This is a test 10 shell" |sed 's/test \(10\)/\1/g'  ##\(10\)用以匹配,而\1作为第一个匹配替换掉前面匹配的内容,可以通过\3 \2 \1 多次替换
    sed "s#FTP_LCD#${DBFILE_DIR}#g;s#FTP_FILE#${FTP_NAME}#g" ftpdown.conf   ##组合多个表达式替换
    sed "s/$name/jk/"    ##变量引用替换
    sed "s:/\*.*\*/::/g"    ##移除注释
    tr -s ' '或者sed 's/[ ]\+/ /g'  ##移除多余空格
    sed 's/[^.]*mobile[^.]*\.//g'    ##移除在同一行中两个.之间的mobile字符串
    5、awk
    语法:awk 'BEGIN{print "start"} pattern {commands} END{print "end"}' file
    示例:awk 'BEGIN{print "start"} {print } END{print "end"}' aa      
    特殊变量:
        NR:记录行数,在执行过程中对应于当前行号
        NF:字段数量,在执行过程中对应当前行的字段数
        $0:包含执行过程中当前行的文本内容
        $1:包含第一个字段的文本内容
        $2:包含第二个字段的文本内容
    行过滤:
        awk 'NR<5'      行号小于5的记录
        awk 'NR==1,NR==4'      行号1和5之间的行
        awk '/linux/'      包含linux的行
        awk    '!/linux/'    不包含linux的行
        awk '/start_pattern/,/end_pattern/' filename    打印匹配字符串中间行
    
    6、tac
    逆序排列
    seq 5 |tac
四、其他命令
    1、wget
    从给定的url中下载文件或者网页
    语法:wget url
    wget -t 5 utl        ##-t表示重试次数,这里表示重试5次
    其他参数以及含义如下:
    --limit-rate 20k    ##表示限速20K,可以用k,m表示限速单位
    --quota或-Q 10m        ##表示限制配额,下载内容大小限制
    -c            ##断点续传
    -r            ##递归
    -l  depth        ##页面层级深度
    -N            ##允许对文件使用时间戳
    --mirror        ##下载网页所有页面
    --user --password    ##针对http或ftp认证的页面,指定用户名和密码
    2、curl
    curl支持http/https/ftp等多种协议的下载
    语法:curl url [option]
    option参数选项如下:
    --silent    ##将下载输出不显示
    -o        ##将输出写入指定文件
    --progress    ##表示显示下载进度
    -C -url        ##断点续传
    -H        ##头部信息
    --limit-rate    ##限制下载带宽
    --max-filesize  ##限制文件大小
    -u username:password    ##指定用户名、密码
    --user-agent    ##指定代理
    --head或-I    ##只打印头部信息,不下载整个文件
    -d或者--data    ##发送指定的数据文件
    
    3、tar
    语法:tar [option] file.tar  file
    option选项如下:
    -c    创建文件
    -r    向已存在压缩包添加新文件
    -t    列出归档文件
    -x    解压压缩包
    -C    指定解压路径
    -A    拼接两个压缩包
    -d    比较压缩包和文件差别
    --delete 删除压缩包中文件 --delete --file aa.tar [file list]
    -j/-z    
    --exclude
    4、zip
    zip/unzip
    5、ifconfig
    ifconfig eth0 10.127.1.1
    ifconfig eth0 10.127.1.1 netmask 255.255.255.0
    ifconfig eth0 hw ether 00:1c:bf:87:24:d5
    6、route
    route -n     ##以数字显示
    route add default gw ip_addr interface_name
    7、watch
    监控命令输出
    语法格式:watch 'commands'
    -n seconds    指定监控刷新间隔时间为N秒
    -d        颜色标记差异
    8、ps
    ps -eo         ##其中-o可以指定输出的列名,具体如下
    参数        描述
    pcpu        CPU占用率
    pid        进程ID
    ppid        父进程ID
    pmem        内存占用率
    comm        可执行文件名
    cmd        简单命令
    user        启动进程用户
    nice        优先级
    time        累积的CPU时间
    etime        进程启动后度过的时间
    tty        关联的tty设备
    euid        有效的用户id
    stat        进程状态
    9、wall
    向所有连接服务器的用户中断发送写入消息
    cat message |wall
    wall "This a message"

五、脚本附录:
    1、统计历史执行命令最多的前10条
    cat ~/.bash_history |awk '{list[$1]++} END {for(i in list){printf("%s\t%d\n",i,list[i])}}'|sort -nrk 2|head
    2、监控1小时内CPU使用情况
#!/bin/bash
#FileName:      pcpu_usage.sh
#Usage:         Calculate cpu usage in 1hour

SECS=3600
UNIT_TIME=60

STEPS=$(($SECS/$UNIT_TIME))
echo Watching CPU Usage ...;
for((i=0;i<steps;i++))
do
  ps -eo comm,pcpu|tail -n +2 >>/tmp/cpu_usage.$$
  sleep $UNIT_TIME
done

echo
echo CPU eaters;

cat /tmp/cpu_usage.$$|awk '{process[$1]+=2} END{for(i in process){printf("%-20s %s\n",i,process[i])}}'|sort -nrk 2|head
rm -rf /tmp/cpu_usage.$$

    3、shift 利用参数位移接收输入参数
#!/bin/bash
while [ $# -ne 0 ]
do
case $1 in
   -f)a=first;shift;;
   -s)b=second;shift;;
   -t)c=third;shift;;
   *)echo nothing;exit 0;;
esac
done
echo $a
echo $b
echo $c
4、syslog
*.*  @ip
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });user=$(whoami); logger $(date "+%Y-%m-%d %H:%M:%S"):$user:"$msg":$(who am i); }'

</steps;i++))

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27067062/viewspace-2130881/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27067062/viewspace-2130881/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值