• linux的shell script


    一、第一个script

      ① 编写习惯

        1)内容与功能 

        2)版本信息

        3)作者与联络方式

        4)建档日期

        5)历史记录

      ② hello world程序

        #!/bin/bash

        echo -e "Hello World!! a "

        exit 0

      ③ 运行程序

        sh 程序

    二、简单实例

      ① 让用户输入值,再输出到屏幕

        read -p “input your firstname” firstname 

        ...

        echo -e "your fullename is : ${firstname} ${lastname}"

      ② 利用data自动创建不同的文档名

        date1=$(date --date='2 days ago' +%Y%m%d)  前两天的日期

      ③ 数值运算

        表达方式1:declare -i total=${firstnu}*${secnu}

        表达方式2:total=$((${firstnu}*${secnu}))

    三、script的执行方式

      ① sh 程序  直接执行,程序会在子程序bash内执行

      ② source 程序  程序在父程序bash内执行

     

    四、test指令的测试功能

      ① test  -e  文件  &&  echo  "存在"  ||  echo  “不存在”  判断文件是否存在及相关属性

        ($?:返回值,正确为0,错误为1)

        -e:该文件是否存在

        -f:该文件是否存在且为 文件(file)

        -d:该文件是否存在且为 目录

        -r:该文件是否存在且具有 可读 权限

        -w:该文件是否存在且具有 可写 权限

        -x:该文件是否存在且具有 可执行 权限

        -u:该文件是否存在且具有 SUID 属性

        -g:该文件是否存在且具有 SGID 属性

        -s:该文件是否存在且为 非空文件

      ②  test  文件1 参数  文件2  比较两个文件

        参数有如下

        -nt:(newer than)判断文件1是否比文件2新

        -ot:(older than)

        -ef:判断两个文件是否为同一个文件,可用在判断hardlink上,是否都指向同一个inode上。

      ③  test  数值1  参数  数值2  判断两个整数

        参数有如下

        -eq:相等(equal)

        -ne:不等(not equal)

        -gt:大于(greater than)

        -lt:小于(less than)

        -ge:大于等于

        -le:小于等于

      ④  判定字符串的数据

        test  -z  string:判定字符串是否为空,若为空,则为true

        test  -n  string:判定字符串是否为非空,若为空,则为false

        test  str1 ==  str2:判定两个字符串相等,若相等,则为true

        test  str1 !=  str2: 判定两个字符串不相等,若相等,则为false

      ⑤  多重条件判定

        test  -r  文件  -a  -x  文件

        -a:and

        -o:or

        !:反向状态

    五、判断符号:[ ]  跟test一样的用法

        [  "$home"  ==  "$samll"  ]  判断两个变量是否相同,每个组件都需要有空格键分隔,变量要用 双引号 括起来

    六、shell script的默认变数($0,$1...)

        ① script的特殊变量如下

          $#:代表后接的参数 个数,返回值如 4(个)

          $@:代表[ "$1" "$2" "$3" "$4" ],每个变量是独立的

          $*:代表[ "$1n$2n$3n$4" ],n为分隔符,默认空格键

            $0:执行的脚本档名,$1:第1个参数,$2:第2个参数

        ② 栗子:直接在执行命令后面带上参数

          1) sh  文件  参数1  参数2  参数3

          2) 脚本内容:

              echo  "脚本名称是:${0}"  

              echo  "有几个参数:$#"

              echo  "参数内容是:$@"

              echo  "第1个参数是:${1}"

              echo  "第2个参数是:${2}"

    七、参数变量号码偏移(想左移除) shift

        shift [n]  n是数字,可以一次移除几个参数

    八、条件判断式

        ① if  [ 条件判断式 一] ; then

            执行的代码

            elif  [条件判断式二] ; then

            执行的代码

            else

            执行的代码

            fi

    九、case ...in...esac判断语句   

          case  $变量  in

            "第一个变量内容"

              执行码

              ;;

            "第二个变量内容"

              执行码

              ;;

            *

              执行码

              ;;

          esac

    十、function(函数)

        function  函数名(){

          执行代码

        }

    十一、loop 循环

      ①不定循环

        while [ 判断式 ]

        do

          执行代码

        done

          当满足条件时循环

        until [判断式]

        do

          执行代码

        done

          当满足条件时终止循环

      ②固定循环

        for  变量名  in  变量值1  变量值2  变量值3 ...

        do

          执行代码

        done

          第一次循环时,变量名的内容为变量值1 。。。

      ③固定循环。 for的另一种写法

        for (( 初始值;限制值;执行步阶 ))  (( i=1;i<=100;i=i+1 ))

        do

          执行代码

        done

      的

    十二、shell script的追踪与debug

      sh  [-nvx]  scripts.sh

        -n:不要执行script,仅查询语法的问题

        -v:再执行script前,先将scripts的内容输出到屏幕上

        -x:将使用到的script内容显示到屏幕上。

    十三:示例

      参考资料1:https://www.cnblogs.com/luoahong/articles/8456203.html

      常用shell脚本:https://www.cnblogs.com/ysgcs/p/9938832.html

    十四:自己编写的shell

      1、当前用户的角色和目录路径

    #!/bin/bash
    #kentee
    #2020/5/5
    #实现自动显示使用者的身份和所在目录
    
    echo -e "您目前的身份是:$(whoami)"
    
    echo -e "您目前所在的目录是:$(pwd)"
    
    echo -e "现在的日期是:$(date +%m%d)"
    View Code

     

      2、让用户输入生日,计算出生日是否已过

    ntee
    #2020/5/5
    #让用户输入自己的生日(月日),计算出用户的生日还有几天。
    
    read -p "请输入您的生日(几月几日,如:0722):" bir
    now=`date +%m%d`
    
    bir=10#${bir}
    now=10#${now}
    
    if((${bir}==${now}));then
            echo -e "今天是您的生日!祝您生日快乐!!!"
    elif ((${bir}<${now}));then
            echo -e "您的生日已经过了哦!祝您新的一年顺顺利利!!!"
    else
            echo -e "您的生日即将到来,好好期待下哦!!!"
    fi
    ~         
    View Code

     十五:

      1、crontab 定时任务

        参考资料:https://www.cnblogs.com/ftl1012/p/crontab.html

      

  • 相关阅读:
    必须转载 PHP & memcached 太精彩了,看一遍就能入门
    SYSID 来指定当前system
    How to increase the JES2 spool size
    JOBPARM SYSAFF的用处
    使用多Volume来创建一个dataset
    如何解决db2nodes.cfg line number “1”, Reason code “10”
    epdf macro to remove comments
    如何停止重复的job
    mysql数值类型
    (九)solr实现autocomplete功能
  • 原文地址:https://www.cnblogs.com/kentee/p/12055808.html
Copyright © 2020-2023  润新知