• Bash Shell编程简记


    Shell编程简记

      经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本。

      按照目录分为如下3个节:

    1. shell的简介和常用的两种方式
    2. shell的语法,包括变量,循环,条件判断,运行终端命令
    3. 我常用的一些shell

    Shell简介

      shell可以看作是一种命令脚本语言,属于解释性的语言。主要运行在linux, unix ,mac 等平台下。 具有的特点是:简单易懂,并且编写开发速度块。

    语法也比较通俗易懂。

         我使用shell的地方,主要是包括两个方面

    第一方面:在终端里,运行简单的linux的shell命令,查看和修改配置文件,查看环境变量,解压缩和上传和下载软件,切分文件,这方面主要使用的是一些常用的linux命令。

    第二方面:就是编写简单的shell脚本,比如运行spark的脚本,执行批量的下载和压缩命令等。 这里就涉及到

     shell的一些语法和程序设计了,之前看shell的书籍,基于shell的程序设计,可以写一本书,我使用的主要是自己常用的一些脚本,所以比较简单。

     只涉及 shell的运行,shell的注释, shell命令行参数, shell中执行终端命令,shell循环, shell条件判断语句, 以及shell的函数。这几个。下面分别介绍。

    Shell的运行

     shell脚本文件,一般以*.sh作为文件后缀。在文件内容中, 

    行首以 # 开头(除#!之外)的是注释。#!是用于指定当前脚本的解释器

    一般如下所示:

     #!/bin/bash
    echo "hello world"

     脚本执行:一般可以为:

      sh  filename

      bash  filename ;

          ./ filename

     注意给脚本添加执行权限:chmod  +x hello.sh

      Shell的基本语法

        shell的语句,一般不需要分号; 只有一行有多个命令时,需要分号,比如:

     #!/bin/bash
    
      echo hello; echo there

     Shell的变量

       Shell中的变量只有两种类型,一种为字符串类型,一种为整形,不需要声明。 变量的赋值通过=赋值,如下语法: 

    #!/bin/bash
     a="asbc"
     b=12
     echo $a
     echo $b

     

      变量一般通过$美元符号引用, $var或者 ${var}的形式

     shell中定义的变量一般作用域为全局变量,

    从命令行传递到脚本的参数:$0,$1,$2,$3...$0就是脚本文件自身的名字,$1 是第一个参数,$2 是第二个参数,$3 是第三个参数

     shell的条件判断和循环

       shell中的if判断格式为:

      if 

      then 

      fi

      举例如:

      #!/bin/bash
       a="asbc"
       if a="asbc"
       then echo "a equals asbc"
       fi
    

     写的时候,一定要注意fi的结束标识符。

       shell中的条件判断, 可以使用

     一对方括号包含条件测试[ ] 或者 test 关键字;

      需要注意的是,方括号中的内容,两边必须有空格,具体的一个例子,如下图,个人感觉用 test 关键字比较好理解一些; 

     #!/bin/bash
      if [ $# -eq 0 ]
       then
           echo "no parameter "
       fi
       if test $# -eq 0
       then
         echo "use test formate no paramter "
       fi

       在bash shell中对文件的判断是非常方便的, 可以使用如下的关键字:

        -e  -f  -d  等。

       举例如: if test -e $filename 等

      对于字符串的判断,可以使用 =, == , != 等关键字符号

       对于整数,可以使用 -eq -ne, -lt 等关键字

      if [ "$a" -eq "$b" ]

       逻辑与 操作为  -a 

       逻辑或, 操作为  -o

     Shell 中的 循环语句

      shell中的循环包括 for , while 等形式,这里只介绍 for循环的使用

      for 循环形式包括如下三种形式:

    #数字段形式
     

     for i in {1..10}
      do
      echo $i
     done

    #详细列出(字符且项数不多)

    for File in 1 2 3 4 5 
    do 
        echo $File 
    done

    #对存在的文件进行循环

    for shname in `ls *.sh`
    do 
              name=`echo "$shname" | awk -F. '{print $1}'`           
              echo $name
    done

      在第三种可以看到,bash shell 中可以嵌入awk的语法处理文字信息

    shell中定义函数

      shell函数的定义可以有两种形式,

    第一种形式:

       函数名(){
        command1
        command2
        ...
        commandN
        [ return value ]

     第二种形式:

     function 函数名(){
        command1
        command2
        ...
        commandN
        [ return value ]
    }

     具体里的一个例子:

       function traversedir(){
           for element in ` ls $1 `
           do
               dir_or_file=$1"/"$element
               if test -d $dir_or_file
               then
                  traversedir $dir_or_file
               else
                 echo $dir_or_file
             fi
              #   echo $1"/"$element
           done
           for i  in {1..10}
           do
             echo $i
           done
      }

       

     Shell的函数调用

      函数名  参数, 举例如:

      tranversedir   "/home/wang/test"

     自己常用的几个Shell

    1  遍历文件夹的脚本

     #!/bin/bash
     function traversedir(){
          for element in ` ls $1 `
          do
              dir_or_file=$1"/"$element
               if test -d $dir_or_file
               then
                 traversedir $dir_or_file
              else
                 echo $dir_or_file
              fi
              #   echo $1"/"$element
           done
       }
     root_dir='/Users/wanggang09/exercise/helloPython'
     traversedir $root_dir

    2 spark的提交脚本

    #!/bin/bash
    num_executor=2
    executor_memory=64G
    src_file='hdfs://test_imei'
    imei_file='hdfs:/sample_wifi_list_simular_2'
    spark-submit --master yarn --deploy-mode client --py-files geohash.py  wifi_list_simular.py  $src_file $imei_file

      

      

    天道酬勤、地道酬善、人道酬诚、商道酬信、业道酬精。
  • 相关阅读:
    【免费赠书】前端程序员修炼之路:积土而为山,积水而为海
    开源网站流量统计系统Piwik源码分析——后台处理(二)
    开源网站流量统计系统Piwik源码分析——参数统计(一)
    数学思维修炼
    《代码大全》中的变量
    linux dmesg命令参数及用法详解(linux显示开机信息命令)
    dd命令使用详解
    Linux就这个范儿 第10章 生死与共的兄弟
    Linux就这个范儿 第9章 特种文件系统
    Bash中的shopt选项
  • 原文地址:https://www.cnblogs.com/xiaotuan/p/7356851.html
Copyright © 2020-2023  润新知