• Linux学习笔记之Shell Scripts


    Shell Scripts

    什么是shell Scripts

      字面了解为针对shell所写的脚本,即利用shell的功能所写的一个程序,该程序使用纯文本文件,其包括shell的语法与指令,搭配正则表达式、管道命令与数据流重定向等功能,已达到理想的处理目的。shell Script在处理数据的速度上不占优势,因为shell scrpit用的是外部的指令与bash shell的一些默认工具,在使用时,通常会转到外部的函数库中执行,因此,相比传统的程序语言,其速度不快。shell script在系统管理上是一项很好的工具,但不能够用于处理大量的数值运算,一则速度慢,二则占用cpu资源较多,会造成主机资源的分配不良。

    编写shell script

    #!/bin/bash
    #program:
    #       This program show "Hello World!"in your screen.
    #History:
    #2019/08/13     aaron   First release
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "Hello World! \a \n"
    exit 0

     第一行#!/bin/bash 表示该script所使用的shell名称,终端默认使用的是bash shell

    其余以#开头的都是注释信息

    PATH为bash shell的环境变量,通过添加路径,可以直接在命令行执行.sh文件

    利用date命令 建立文件,该文件名的名称随日期变化

    #History:
    #2019/08/13     aaron   First release
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:~/bin
    export PATH
    
    echo -e "I will use 'touch' command to create 3 files."
    read -p "Please input your filename: " filename
    filename=${fileuser:-"filename"}
    date1=$(date --date='2 days ago' +%Y%m%d)
    date2=$(date --date='1 days ago' +%Y%m%d)
    date3=$(date +%Y%m%d)
    file1=${filename}${date1}
    file2=${filename}${date2}
    file3=${filename}${date3}
    
    touch "${file1}"
    touch "${file2}"
    touch "${file3}"
    
    exit 0

    在编写script时尤其要注意语句的间隔符,多了没事(会当作1个空格符),少了则不符合语句规则

    小指令:$(command)

    var=$((运算内容))

    算数高级运算指令bc

     script的执行方式差异

    执行方式:source、sh script、./script

    直接执行方式:该执行方式会使用一个新非bash环境来执行脚本内的指令,即script是在子程序的bash内执行的,script内建立的本地变量不会传到父程序中

    source执行方式:该执行方式是在父程序中执行,各项动作都会在源bash中生效

    判断

    test命令(并不会直接显示结果,可以通过echo $?来查看,如果是0表示存在,1表示不存在)

    test  -e  filesname        filename是否存在

    test  -f  filename           filename是否为普通文件

    test  -d  filename          filename是否为文件夹

    test  -b  filename          filename是否为block device装置

    test  -c  filename          filename是否为character device装置

    test  -s  filename          filename是否存在且为非空文件

    test  -r  filename          filename是否具有可读权限

    test  -w  filename         filename是否具有可写权限

    test  -x  filename          filename是否具有可执行权限

    test  file1 -nt  file2        判断file1是否比file2新

    test  file1  -ot  file2        判断file1是否比file2旧

    test  file1  -ef  file2        判断file1与file2是否为同一个文件,即指向同一个inode

    只列出一小部分test相关的操作

    []判断

    用法:使用方法与test 一模一样,只是[]常用在if……then……fi中

    注意事项:[]在进行判断是其内部两端需要有空格;

         在[]中的内阁组件都余姚有空格来分隔;

         在[]中的变量,最好用双引号引起来;

         在[]中的常量,最好都以单引号或双引号括起来。

    shell script的默认变量

    script脚本  restart         表示重新启动这script脚本

    script脚本  stop          关闭该服务

    带参数的script脚本

    命令行:script名  参数1 参数2  参数3

        $0   $1  $2  $3

    特殊变量:$#  表示命令后有几个参数

         $@  表示“$1” “$2” “$3” “$4” 即将每个变量用双引号括起来

         $*  表示“$1c$2c$3c$4” c表示分隔符(默认为空格)

    shiftNUM 参数偏移

    shift 默认为删除最前面的1个参数

    NUM为数字可以表示删除最前面的NUM个参数

    #!/bin/bash
    
    echo "This script name is ${0}"
    echo "Total paras number is $#"
    echo "The whole paras is \"$@\""
    #删除one
    shift    
    echo "This script name is ${0}"
    echo "Total paras number is $#"
    echo "The whole paras is \"$@\""
    #删除two
    shift
    echo "This script name is ${0}"
    echo "Total paras number is $#"
    echo "The whole paras is \"$@\""
    shift
    echo "This script name is ${0}"
    echo "Total paras number is $#"
    echo "The whole paras is \"$@\""

    执行结果

  • 相关阅读:
    线程学习笔记
    mac系统在配置navicat时连接数据的时候提示can't connect to mysql server on '127.0.0.1'
    启动apache 提示Starting httpd: AH00558
    使用block的时候,导致的内存泄漏
    如何调整cell的大小
    代码控制打电话、发短信、发邮件、打开手机app等操作
    汇编学习--第九天
    汇编学习--第八天
    原码一位乘法与补码一位乘法
    定点整数的加减法
  • 原文地址:https://www.cnblogs.com/aaronbin/p/14323897.html
Copyright © 2020-2023  润新知