新动向,新机遇

最新发展动态、最热行业资讯,与主题云一起见证云时代精彩瞬间

shell脚本编写之初级版

浏览量(8286) 时间:2020-08-10

1.  shell脚本的执行顺序是从上而下的,面向过程。
2.  文件名称格式: xxx.sh
3.  文件内容的第一行: #!/bin/bash
4.  shell脚本就是将命令全部融合在一起
5.  定义变量
    shell脚本的变量是以:key=value 定义的,注意:=两边不能有空格
    静态变量定义:a='www.ruozedata.com'    
    动态变量定义:b=`date`    #变量b是获取当前时间,调用b的时候动态获取当前时间
    shell脚本里面使用变量的方法:${变量} ,如使用变量a就应该是${a}。
6.  if判断
    可以判断:整数、小数 、字符串、文件夹是否存在、文件是否存在 等。 
    格式: if [空格 xx = yy 空格]   注意:使用单个等号,表达式前后及等号两边各有一个空格。
   示例:
          if [ '$a' = 'www.ruozedata.com' ]; then
              echo "D3"
            fi
7.  shell中for循环的几个常用写法
    第一类:数字性循环
        例1:
                #!/bin/bash  
                for((i=1;i<=10;i++));  
                do   
                    echo $(expr $i \* 3 + 1);  
                done 
        例2:
                #!/bin/bash  
                for i in $(seq 1 10)  
                do   
                    echo $(expr $i \* 3 + 1);  
                done  

        例3:
                #!/bin/bash  
                for i in {1..10}  
                do  
                    echo $(expr $i \* 3 + 1);  
                done

        例4:
                #!/bin/bash  
                awk 'BEGIN{for(i=1; i<=10; i++) print i}'  


    第二类:字符性循环
        例1:
                #!/bin/bash  
                for i in `ls`;  
                do   
                    echo $i is file name\! ;  
                done  

        例2:
                #!/bin/bash  
                for i in $* ;  
                do  
                    echo $i is input chart\! ;  
                done 
 
        例3:
                #!/bin/bash  
                for i in f1 f2 f3 ;  
                do  
                    echo $i is appoint ;  
                done  

        例4:
                #!/bin/bash    
                list="rootfs usr data data2"  
                for i in $list;  
                do  
                    echo $i is appoint ;  
                done  

    第三类:路径查找
        例1:
                #!/bin/bash  
                for file in /proc/*;  
                do  
                    echo $file is file path \! ;  
                done
 
        例2:
                #!/bin/bash  
                for file in $(ls *.sh)  
                do  
                    echo $file is file path \! ;  
                done  

8.  分割 
      shell中字符串分割的三种方法:
        例1:分割字符串’1,2,3,4,5’,以“,”分割
            #!/bin/bash  
            var=’1,2,3,4,5’  
            var=${var//,/ }    #这里是将var中的,替换为空格  
            for element in $var   
            do  
                echo $element  
            done 


        例2:分割字符串’mark:x:0:0:this is a test user:/var/mark:nologin’,以“:”分割
            #!/bin/bash  
            user=’mark:x:0:0:this is a test user:/var/mark:nologin’  
            for((i=1;i<=7;i++))  
            do  
                    echo $user|cut -d ":" -f$i  
            done  


        例3:针对例2写的一种通用的脚本(也使用例1)
            #!/bin/bash  
            user=’mark:x:0:0:this is a test user:/var/mark:nologin’  
            i=1  
            while((1==1))  
            do  
                    split=`echo $user|cut -d ":" -f$i`  
                    if [ "$split" != "" ]  
                    then  
                            ((i++))  
                            echo $split  
                    else  
                            break  
                    fi  
            done  

9.  赋权限和执行
    给shell脚本赋可执行权限: chmod +x xxx.sh
    执行shell脚本的命令:./xxx.sh   
              sh  xxx.sh 
10. debug模式 
    在开发中,经常要是用debug模式来排查问题。
    现在有两种开启debug模式的方法:
    1. 在shell脚本的#!/bin/bash  后面加上 -x:   #!/bin/bash -x   
       #编辑 20180525.sh文件  添加 -x参数后保存退出
        [hadoop@hadoop002 ~]$ vi 20180525.sh 
        #!/bin/bash -x
        a='www.ruozedata.com'
        b=`date`
        echo $a
        echo ${a}${b}c/d
       #执行20180525.sh  脚本
        [hadoop@hadoop002 ~]$ ./20180525.sh 
        + a=www.ruozedata.com
        ++ date
        + b='Fri May 25 14:29:54 CST 2018'
        + echo www.ruozedata.com
        www.ruozedata.com
        + echo www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
        www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
        [hadoop@hadoop002 ~]$ 


    2. 在执行脚本的时候 带上-x参数:  sh -x test.sh
       #删除20180525.sh脚本里面的 -x参数后,执行执行 sh -x 20180525.sh 命令
        [hadoop@hadoop002 ~]$ sh -x 20180525.sh 
        + a=www.ruozedata.com
        ++ date
        + b='Fri May 25 14:30:20 CST 2018'
        + echo www.ruozedata.com
         www.ruozedata.com
         + echo www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
        www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
        [hadoop@hadoop002 ~]$ 
最新文章