美文网首页
Linux Shell的简单使用

Linux Shell的简单使用

作者: 喵星人ZC | 来源:发表于2019-04-15 23:54 被阅读0次

    一、Vim命令的简单使用请参考

    VIM常用命令汇总

    二、Shell编程规范

    1)shell文件行业规范默认后缀为.sh
    2)shell首行为 
    #!/bin/bash
    注意/bin/bash为当前脚本解释器,可以不写但不能写错了。
    3)#表示注释
    4)shell对大小写敏感,变量尽量全大写
    

    三、变量

    1、环境变量

    全局生效
    通过set命令查看
    用户环境变量,当前用户生效
    系统环境变量,所有用户生效
    通过export声明变
    

    2、位置变量
    将脚本的参数传给脚本,多个参数使用空格隔开

    $0: 获取脚本文件名称
    $1、$2....$9 :执行脚本的参数
    -----------------------------------------------------------------
    用例 
    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    echo "$0"
    echo "$2"
    echo "$3"
    echo "$1"
    
    -------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh oneParm
    test.sh
    
    
    oneParm
    

    3、预定义变量
    由系统保留和维护的一组特殊变量

    $0  :  获得当前脚本的名称
    
    用例演示
    ###########
    cat test.sh 
    #!/bin/bash
    echo $0
    ############
    [hadoop@hadoop000 script]$ sh test.sh 
    test.sh
    
    ---------------------------------------------------------------
    $!  :  后台运行的最后一个进程的PID
    ---------------------------------------------------------------
    $?  :  上一个命令退出的状态(0:成功,非0:失败)
    ---------------------------------------------------------------
    $*  :  当前shell参数集合(整体)
    ---------------------------------------------------------------
    $$  :  表示当前进程ID号码
    ---------------------------------------------------------------
    $#  :  代表当前shell的参数个数
    ---------------------------------------------------------------
    $@  :  当前shell参数集合(逐个读取)
    

    4、自定义变量

    变量命令格式:
    -------------------------------
    变量名=变量值
    -------------------------------
    注意:
    1、等号两边不能有空格
    2、变量名大小写敏感,官方建议大写
    -------------------------------
    变量取值:$变量名 或${变量名}
    

    四、算数运算

    常用运算符:

    + - * / % 
    

    语法格式

    $((expression)) 或
    $[expression] 或
    expr expression
    

    用例:

    [hadoop@hadoop000 script]$ echo $((10+10))
    20
    [hadoop@hadoop000 script]$ echo $[10+10]
    20
    [hadoop@hadoop000 script]$ echo 10+10
    10+10
    

    五、比对符

    数值常用比对符:

    -eq 等于,equal
    -------------------------------
    -ne 不等于,not equal
    -------------------------------
    -gt 大于,greate than
    -------------------------------
    -ge 大于等于,greate than or equal
    -------------------------------
    -lt 小于,less than
    -------------------------------
    -le 小于等于,less than or equal
    

    字符串常用比对符:

    =  等于
    -------------------------------
    != 不等于
    -------------------------------
    -z 长度为零,如:  [ -z "$myvar" ] 
    -------------------------------
    -n 长度为零,如:  [ -z "$myvar" ] 
    

    \color{red}{注意}
    \color{red}{1、字符串比较时可以用=也可以用==,左右离比较符必须有空格}
    \color{red}{2、等于“=”不仅可以用来比较字符串也可以比较数字,注意要有空格,否则就是赋值了。}

    六、文件判断

    文件判断

    -e 文件名,文件存在为真
    -r 文件名,文件存在且可读为真
    -w 文件名,文件存在且可写为真
    -x 文件名,文件存在且可执行为真
    -s 文件名,文件存在且有一个字符为真
    -d 文件名,文件存在且为目录为真,目录ll显示为d
    -f 文件名,文件存在且为普通文件为真,普通文件类型为-
    -c 文件名,文件存在且为字符串型特殊文件为真,几乎不用使用到。ll /dev/ 可查看c类型文件
    -b 文件名,文件存在且为块特殊文件为真,几乎不会使用到。ll /dev/ 可查看b类型文件
    

    七、Date的使用

    1、date 获取以及零时修改当前时间

    [hadoop@hadoop000 script]$ date 
    Sun Apr 14 23:29:29 CST 2019
    [hadoop@hadoop000 script]$ date -s "2019-04-10 02:20:57"
    date: cannot set date: Operation not permitted
    Wed Apr 10 02:20:57 CST 2019
    

    2、修改date的输出格式

    [hadoop@hadoop000 script]$ date '+%Y%m%d%H%M%S'
    20190414233226
    
    [hadoop@hadoop000 script]$ date +"%Y-%m-%d" 
    2019-04-14
    

    3、Date加减运算

    [hadoop@hadoop000 script]$ date +"%Y年%m月%d日"
    2019年04月14日
    
    [hadoop@hadoop000 script]$ date '+%Y%m%d%H%M%S' -d'-1 day'  
    20190413234358
    
    [hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 day'  
    2019年04月13日
    
    
    [hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 week'    
    2019年04月07日
    
    [hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 year'       
    2018年04月14日
    
    

    八、数组

    语法结构

    变量名=(元素1 元素2 元素3 元素4 元素5 元素6 )
    注意 默认元素间是以空格分隔
    

    用例1:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    arr=(ruoze jepson xingxing wsk shiqi)
    for i in ${arr[@]}
    do
            echo $i
    done
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    ruoze
    jepson
    xingxing
    wsk
    shiqi
    

    用例2:字符串间使用逗分隔,OLD_IFS,IFS这些事固定写法,分隔字符串

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    S="ruoze,jepson,xingxing,wsk,shiqi"
    OLD_IFS="$IFS"
    IFS=","
    arr=($S)
    IFS="OLD_IFS"
    for i in ${arr[@]}
    do
            echo $i
    --------------------------------------------------------------------------------------
    
    [hadoop@hadoop000 script]$ sh test.sh 
    ruoze
    jepson
    xingxing
    wsk
    shiqi
    

    九、控制语句

    1、 for循环
    语法1:

    for 变量 in 集合
    do
    逻辑
    done
    

    语法2:

    for((初始变量;结束循环调节;变量))
    do
    逻辑
    done
    

    语法1用例:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    for i in tony jet bob
    do
    echo $i
    echo "hello $i"
    done
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    tony
    hello tony
    jet
    hello jet
    bob
    hello bob
    

    语法2用例(注意 {1..10} 可以用seq 10取代):

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    for i in {1..10}
    do
    mkdir dir$i
    done
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    [hadoop@hadoop000 script]$ ll
    total 44
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir1
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir10
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir2
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir3
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir4
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir5
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir6
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir7
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir8
    drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir9
    

    2、while循环
    语法1:

    while [条件]
    do
    逻辑
    done
    

    语法2:

    while read -r line
    do
    逻辑
    done
    

    语法1用例:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    i=0
    sum=0
    while [ $i -lt 10 ]
    do
    sum=$(($sum+$i))
    i=$[$i+1]
    done
    echo $sum
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    45
    

    语法2用例\color{red}{[读取文件的每一行]}

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    while read -r line
    do
    echo $line
    done < test.sh
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    #!/bin/bash
    while read -r line
    do
    echo $line
    done < test.sh
    

    语法2用例\color{red}{[读取文件的每一行,并取第一列和hello拼接]}

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    while read -r line
    do
    echo `echo $line | awk -F: '{print $1}'`:hello 
    done < /etc/passwd
    --------------------------------------------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    root:hello
    bin:hello
    daemon:hello
    adm:hello
    lp:hello
    sync:hello
    shutdown:hello
    halt:hello
    mail:hello
    uucp:hello
    operator:hello
    games:hello
    gopher:hello
    ftp:hello
    nobody:hello
    dbus:hello
    usbmuxd:hello
    vcsa:hello
    rpc:hello
    rtkit:hello
    avahi-autoipd:hello
    abrt:hello
    rpcuser:hello
    nfsnobody:hello
    haldaemon:hello
    gdm:hello
    ntp:hello
    apache:hello
    saslauth:hello
    postfix:hello
    pulse:hello
    sshd:hello
    tcpdump:hello
    hadoop:hello
    mysql:hello
    

    3、if条件判断
    语法1

    if 条件
    then
       逻辑
    fi
    

    语法2

    if 条件
    then
       逻辑
    else
       逻辑
    fi
    

    语法3

    if 条件
    then
        逻辑
    elif
    then
        逻辑
    else
        逻辑
    fi  
    

    语法1用例:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    if [ 2 -eq 2 ]
    then
    echo yes
    else
    echo no
    fi
    ----------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    yes
    

    4、case 条件选择
    语法

    case $变量名称 in
    条件1)
        命令序列
        ;;
    条件2)
        命令序列
        ;;
    条件3)
        命令序列
        ;;
    *)
    esac
    

    用例:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    case $1 in
    1)
            echo "我是"$1
            ;;
    2)
            echo "我是"$1
            ;;
    3)
            echo "我是"$1
            ;;
    *)
            echo "我是"$1
            ;;
    esac
    -------------------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh jack
    我是jack
    

    十、函数

    语法

    function name{
        方法体
    }
    
    -----------------------或者-----------------------------
    
    name(){
        方法体
    }
    

    用例:

    [hadoop@hadoop000 script]$ cat test.sh 
    #!/bin/bash
    sum(){
            echo $(($1+$2))
    }
    
    sum 2 7
    -----------------------------------------
    [hadoop@hadoop000 script]$ sh test.sh 
    9
    

    十一、awk 文件扫描

    语法:

    awk '{pattern + action}' {filenames}
    

    用例1:\color{red}{输出第一行,NR表示行号}

    [hadoop@hadoop000 script]$ cat data.log 
    1,a,欢
    2,b,迎
    3,c,您
    ------------------------
    [hadoop@hadoop000 script]$ cat data.log| awk -F "," 'NR==1' 
    1,a,欢
    

    用例2:\color{red}{输出第一行之后的所有行}

    [hadoop@hadoop000 script]$ cat data.log| awk -F "," 'NR>1' 
    2,b,迎
    3,c,您
    

    用例3:\color{red}{输出第一列和第二列}

    [hadoop@hadoop000 script]$ awk -F "," '{print $1,$2}' data.log 
    1 a
    2 b
    3 c
    

    用例4:\color{red}{输出第2列第二行}

    awk -F "," 'NR==2{print $2}' data.log 
    

    十二、sed 流编辑器(替换)

    语法:

    sed [options] 'command' file(s)
    

    用例1:\color{red}{1替换成a}

    [hadoop@hadoop000 script]$ cat data.log 
    1,a,欢
    2,b,迎
    3,c,您
    ------------------------------
    [hadoop@hadoop000 script]$  sed -i 's/1/a/' data.log
    [hadoop@hadoop000 script]$ cat data.log 
    a,a,欢
    2,b,迎
    3,c,您
    

    \color{blue}{注 :sed -r 's/1/a/' data.log 不会真正得到修改文件,但会输出替换后的内容到控制台,所以可以 -r 测试}

    用例2:\color{red}{全文本a替换成aa} \color{blue}{-g为全局参数}

    [hadoop@hadoop000 script]$ cat data.log 
    a,a,欢
    2,b,迎
    3,c,您
    [hadoop@hadoop000 script]$  sed -i 's/a/aa/g' data.log  
    [hadoop@hadoop000 script]$ cat data.log 
    aa,aa,欢
    2,b,迎
    3,c,您
    

    用例3:\color{red}{在每行行首添加 -- 字符串}

    [hadoop@hadoop000 script]$ cat data.log 
    aa,aa,欢
    2,b,迎
    3,c,您
    [hadoop@hadoop000 script]$ sed -i 's/^/--&/g' data.log 
    [hadoop@hadoop000 script]$ cat data.log 
    --aa,aa,欢
    --2,b,迎
    --3,c,您
    

    用例4:\color{red}{在每行行尾添加 $$ 字符串}

    [hadoop@hadoop000 script]$ cat data.log 
    --aa,aa,欢
    --2,b,迎
    --3,c,您
    [hadoop@hadoop000 script]$ sed -i 's/$/&$$/g' data.log     
    [hadoop@hadoop000 script]$ cat data.log 
    --aa,aa,欢$$
    --2,b,迎$$
    --3,c,您$$
    

    相关文章

      网友评论

          本文标题:Linux Shell的简单使用

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