LINUX学习笔记——Shell scripts


TNND,终于到这里了


Hello World

什么经典开局

  1. 程序样例

    
    [aweip@manjaro ~]$ mkdir bin; cd bin
    [aweip@manjaro ~]$ vim hello.sh
    #!/bin/bash
    # Program:
    # To shows "Hello World!"
    # History:
    # 2022/07/24 AweiP 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 名称
    • 程序内容的说明: 除了第一行的『 #! 』是用来宣告 shell 的之外,其他的 # 都是『批注』用途 ,第二行以下就是用来说明整个程序的基本数据。
    • 主要环境变量的宣告 : 务必要将一些重要的环境变量设定好
    • 主要程序部分 :这个例子当中,就是 echo 那一行
    • 执行成果告知 (定义回传值) :利用 exit 这个指令来让程序中断,并且回传一个数值给系统
  2. 执行结果

    
    [aweip@manjaro ~]$ sh hello.sh
    Hello World !
  3. 简单加减乘除求余(即+-*/%)

    
    [aweip@manjaro ~]$ vim multiplying.sh
    #!/bin/bash
    # Program:
    # Inputs 2 integer numbers; program will cross these two numbers.
    # History:
    # 2022/07/24
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "Input 2 numbers\n"
    read -p "first: " firstnu
    read -p "second: " secnu
    total=$((${firstnu}*${secnu}))
    echo -e "\nThe result of ${firstnu} x ${secnu} is ==> ${total}"

script 的执行方式差异 (source, sh script, ./script)

  1. 直接执行的方式来执行 script

    sh test.sh

    使用这种执行方式时, script 是在子程序的 bash 内执行 ,当test.sh 执行完毕后, 子程序 bash 内的所有数据便被移除 (变量作用域仅在fork出的子程序中)

  2. 利用 source 来执行脚本:在父程序中执行

    source test.sh

善用判断式

利用 test 指令的测试功能

例子:test -e /dmtsai && echo "exist" || echo "Not exist"

  1. 关于某个档名的『文件类型』判断

    测试的标志 代表意义
    -e 该『档名』是否存在? (常用)
    -f 该『档名』是否存在且为文件(file)? (常用)
    -d 该『文件名』是否存在且为目录(directory)? (常用)
  2. 关于文件的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外)

    测试的标志 代表意义
    -r 侦测该档名是否存在且具有『可读』的权限?
    -w 侦测该档名是否存在且具有『可写』的权限?
    -x 侦测该档名是否存在且具有『可执行』的权限?
    -u 侦测该文件名是否存在且具有『SUID』的属性?
    -g 侦测该文件名是否存在且具有『SGID』的属性?
    -s 侦测该档名是否存在且为『非空白文件

​ .......

利用判断符号 [ ]

声明:AweiP Cache|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LINUX学习笔记——Shell scripts


且愿饮冰而热血不凉