zoukankan      html  css  js  c++  java
  • shell编程快速入门及实战

    shell编程:对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码。

    1、shell文件格式:xxx.sh

    #!/bin/sh ---shell文件第一行必须这么写
    #井号后面的内容是注释
    echo 'abcd' ----echo是输出,回显

    在hadoop0:
    mkdir shellfile
    cd shellfile
    ls
    vi test.sh
    #!/bin/sh
    echo 'abcd'
    ls
    ll
    tset.sh ---现在执行发现没有权限,需修改权限才能执行
    chmod u+x test.sh
    ll    ---列出文件的详细信息
    test.sh ---现在就能执行了,输出了abcd

    vi test.sh
    #!/bin/sh
    i=0 ---变量不需要声明,初始化不需要指定类型。变量名称只能是字母、数字、下划线组成,不能使用数字开头。
    echo $i ---显示变量值使用:echo $变量名

    2、变量分类:临时变量和环境变量(/etc/profile:export XXX)

    3、单引号、双引号、飘号的使用:
    vi test.sh
    #!/bin/sh
    i=0
    echo ${i}1234 ---输出01234,要想变量独立使用的时候,用大括号独立开

    vi test.sh
    #!/bin/sh
    i=0
    echo '$i' ---输出$i,单引号不解析变量
    echo "$i" ---输出0,双引号解析变量

    vi test.sh
    #!/bin/sh
    i=0
    echo '$i'
    echo "$i"
    echo $(date) ---输出时间
    echo `date` ---飘号是执行内容,类似于上面的$(XXX)。这里`data`==$(date)

    4、位置变量:执行脚本时,传入的参数按照先后顺序使用$1、$2等顺序引用变量值 。
    vi test.sh
    #!/bin/sh
    i=0
    echo "first param:$1"
    echo "second param:$2"
    执行:test.sh abc 123
    输出:first param:abc
            second param:123

    5、使用date:(更详细的查看《date命令使用文档》)
    1、可以直接执行date,输出的是系统的当前时间。


    2、格式化输出,date +%Y-%m-%d ---%Y 年 %m 月 %d 日 中间的是分隔符-,也可以换成别人分隔符 2017-4-10


    3、date +%s      ---格式%s表示自1970-01-01 00:00:00以来的秒数


    4、date --date=‘2017-4-10’ ---指定时间输出 --date='2009-01-01 11:11:11'


    5、指定时间输出 --date='3 days ago'

    6、标准输入、输出、错误:
    1、标准输入、输出、错误都是命令行,使用文件描述符0、1、2引用
    2、使用重定向可以把信息转换到其他位置
    ---------
    ls > a.txt ---将test.sh转换到a.txt中输出了
    ls 1>b.txt ---将a.txt和test.sh转换到b.txt中输出了

    7、使用crontab(类似于Java中的timer):
      1、Linux下的定时任务
      2、编辑使用crontab -e
            * * * * * date>>/root/a.txt
            一共六列,分别是:分 时 日 月 周 命令
            (默认是按照每个小时的第一分钟输出)
            要想按照每个小时的第5分钟输出,则需修改为:5 * * * * date>>/root/a.txt
            要想每隔5分钟输出,则修改为:5,10,15,20,25,30 * * * * date>>/root/a.txt
      3、查看使用crontab -l

    8、if判断、for循环:(注意符号之间空格!每一行的结束都有一个空格!!!)
    if [ ... ] ---if和[之间、[和条件之间、条件和]之间都有一个空格。
    then
    ...
    fi

    for ((i=0;i<10;i++)) ---for和(之间有个空格
    do
    ...
    done
    ----------
    vi if.sh
    #!/bin/sh
    if [ 'a'='a' ]
    then
    echo 'equal'
    fi
    chmod u+x if.sh
    if.sh ---输出equal

    vi for.sh
    #!/bin/sh
    for ((i=0;i<10;i++))
    do
    echo $i
    done
    chmod u+x for.sh
    for.sh

    9、自定义函数:
    function 函数名(){
    ....
    }

    //最后一行语句是默认返回值

    引用自定义函数文件时,使用source func.sh
    ------------------
    vi func.sh
      #!/bin/sh
      function dat(){
        date +%Y-%m-%d
      }
      dat

    chmod u+x func.sh
    func.sh

    vi func.sh
    #!/bin/sh
    function dat(){
    date --date="$1 days ago" +%Y-%m-%d
    }
    dat 2
    func.sh ---输出当前时间的2天前的日期


    -----------------

    在test.sh中引用func.sh:
    vi test.sh
    #!/bin/sh
    source func.sh ---最好指定路径
    dat -2
    test.sh ---输出2天后的日期

     

  • 相关阅读:
    USACO 1.3.1 Mixing Milk
    USACO 1.2.5 Dual Palindromes
    USACO 1.2.4 Palindromic Squares
    十进制数转其他进制数
    USACO 1.2.3 Name That number
    USACO 1.2.2 Transformations
    USACO 1.2.1 Milking Cows
    矩阵的旋转,转置和翻转以及它们的关系
    P1078 文化之旅
    P3435 [POI2006]OKR-Periods of Words
  • 原文地址:https://www.cnblogs.com/ahu-lichang/p/6692546.html
Copyright © 2011-2022 走看看