zoukankan      html  css  js  c++  java
  • shell的基本使用

    1.第一行

    #!/bin/bash,#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 bash 程序。

    2.运行脚本

    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    

    3.变量设置

    your_name="harry"
    

    注意,变量名和等号之间不能有空格

    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    4.if-else的使用

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    

    注意:必须以fi结尾

    if else-if else

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    

    5.运算符

    #!/bin/bash
    
    a=10
    b=20
    c="company"
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a * $b`
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    
    if [ $a == $b ]
    then
       echo "a 等于 b"
    fi
    if [ $a != $b ]
    then
       echo "a 不等于 b"
    fi
    if [ $c = "company" ]
    then
       echo "c 是 company"
    fi
    

    输出:

    a + b : 30
    a - b : -10
    a * b : 200
    b / a : 2
    b % a : 0
    a 不等于 b
    c 是 company
    

    注意:

    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
    • 完整的表达式要被 反引号````包含
    • 条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
    • 乘号(*)前边必须加反斜杠()才能实现乘法运算
    • 字符串是否相等使用=,不是==

    6.在Linux bash下读取用户输入

    echo "Input something:"  
    read input  
    echo "Your input is: $input"  
    

    输出:

    Input something:  
    test
    Your input is: test  
    

    7.在Windows上编写完成后,在Linux上运行先使用

    vim test.sh
    :set ff?
    

    检查编码格式,如果出现fileforma=dos,则使用:set fileformat=unix改变编码。

    因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符。

    脚本文件是DOS格式的, 即每一行的行尾以 来标识, 其ASCII码分别是0x0D, 0x0A。

    8.脚本使规范

    usage(){
        echo -e "Usage: ./test.sh -d [pwd] -u [pwd]
    
     -d 指定输出目录,且不以/结尾
     -u 指定解压目录,且不以/结尾
     -h, --help 使用帮助
    
    Sample: ./mrs.sh  -d "/data/out" -u "/data/zip"  "
    exit 1
    }
    
    if [[ $# -eq 0 ]]; then
        usage
    fi
    
    while [ $# -gt 0 ]; do
        case $1 in
    
            -h|--help)
                usage
                shift 1
                ;;
            -d)
                if [[ $2 ]]; then
                    outDir=$2
                    shift 2
                else
                    usage
                    shift 1
                fi
                ;;
            -u)
                if [[ $2 ]]; then
                    unzipDir=$2
                    shift 2
                else
                    usage
                    shift 1
                fi
                ;;
            *)  
                usage
                shift 1
                ;;
        esac
    done
    
    if [[ "$outDir" = "" || "$unzipDir" = "" ]]; then
        usage
    fi
    

    9.tar与unzip解压到指定目录

    • tar zxvf xxx.tar.gz -C ./test
    • unzip xxx.zip -d ./test
    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件
    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
    -z:有gzip属性的
    -j:有bz2属性的
    -Z:有compress属性的
    -v:显示所有过程
    -O:将文件解开到标准输出
    下面的参数-f是必须的
    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
    

    10.字符串分割

    假设有变量var=CQ_QQ_2017071115

    var=CQ_QQ_2017071115
    
    # #号截取,删除左边字符,保留右边字符
    echo ${var#*_}
    #号是运算符,*_ 表示从左边开始删除第一个 _ 号及左边的所有字符
    >QQ_2017071115
    
    # ##号截取,删除左边字符,保留右边字符
    echo ${var##*_}
    ##*_ 表示从左边开始删除最后(最右边)一个 _ 号及左边的所有字符
    >2017071115
    
    # %号截取,删除右边字符,保留左边字符
    echo ${var%_*}
    %_* 表示从右边开始,删除第一个 _ 号及右边的字符
    >CQ_QQ
    
    # %%号截取,删除右边字符,保留左边字符
    echo ${var%%_*}
    %%_* 表示从右边开始,删除最后(最左边)一个 _ 号及右边的字符
    >CQ
    
    # 从左边第几个字符开始,及字符的个数
    echo ${var:0:6}
    0代表从0开始,截取6个字符
    >CQ_QQ_
    
    # 从左边第几个字符开始,一直到结束
    echo ${var:7}
    7代表从7开始,截取到最后
    >017071115
    
    # 从右边第几个字符开始,及字符的个数
    echo ${var:0-7:3}
    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数
    >707
    
    # 从右边第几个字符开始,一直到结束
    echo ${var:0-7}
    表示从右边第七个字符开始,一直到结束
    >7071115
    

    11.awk的简单使用

    比如现在文件目录为

    CQ_QQ_2017071110_LO.tar.gz
    CQ_QQ_2017071111_LO.tar.gz
    CQ_QQ_2017071210_LO.tar.gz
    CQ_QQ_2017071211_LO.tar.gz
    

    现在使用

    list_alldir(){   
        for file in $1/*
        do
            if [ -d $file ]; then
                list_alldir $file
            else
                filename=${file##*/.}  # 从路径中取出文件名
                fileName=`echo $filename | awk -F '_' '{print $3}'`
                if [[ `echo ${fileName:0:8}` = $2 ]]    
                then
                tar zxf $file -C ./test    #解压文件
                fi
            fi
        done
    }
    

    其中fileName=`echo $filename | awk -F '' '{print $3}'`意思为将filename以'_'分割(awk -F ''),分割后为四段,分别为'CQ','QQ','2017071110','LO.tar.gz',然后我们取第三段('{print $3}'),再echo输出,最后赋值给fileName。

    再判断if [[ `echo ${fileName:0:8}` = $2 ]] 如果日期等于输入的日期就执行,tar zxf $file -C ./test 解压文件。

  • 相关阅读:
    服务器监控
    hadoop
    tomcat7 配置
    tomcat
    列表加载
    自适应网页设计(Responsive Web Design)
    Android Native 代码NDK开发学习笔记
    NDK开发历程(一):android native code的调试方法
    Android原生(Native)C开发之一:环境搭建篇
    ajaxfileupload 传参数
  • 原文地址:https://www.cnblogs.com/harrylyx/p/14254535.html
Copyright © 2011-2022 走看看