• Shell


    一、创建流程:

    ①创建.sh文件

    ②编写shell代码

    ③执行shell脚本 (脚本必须得有执行权限)

    例1:创建.sh文件,输出hello world.

     

     #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]

    文件名.sh .sh是linux下bash shell 的默认后缀

    例2:用root帐号创建并执行.sh文件,创建新用户,并在其家目录中新建文件1.html。

     

    二、变量

    1、定义与使用

    定义:class_name="tom "

    使用:echo $class_name

    单双引号:

    双引号能够识别变量,双引号能够实现转义(类似于“\*”)

    单引号是不能识别变量,只会原样输出,单引号是不能转义的

    例:定义一个变量,输出当前时间

      #!/bin/bash
       d=`date +'%F %T'`;
       echo $d

    当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”。

    2、只读变量:readonly 变量名

    例:定义变量并赋值,然后设置其为只读变量,再重新赋值

    3、接收用户输入:read  -p  提示信息  变量名

    例:编写一个脚本,执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件

     

     

    4、删除变量:unset 变量名

    例:定义变量,输出变量的值,随后删除,最后再输出

     

     

    三、条件判断语句

     

    语法1(一个条件):

    if condition

    then command

    fi

    单行写法:if [ condition ]; then command; fi

    语法2(两个条件):

    if condition

    then  command

    else  command

    fi

    语法3(多个条件):

    if condition1

    then  command1

    elif condition2

    then  command2

    else  commandN

    fi

    四、运算符

    1、算数运算符

    变量 num1=10, num2= 20:

    + 加法 `expr $num1 + $num2` 结果为 30。

    - 减法 `expr $num1 -  $num2` 结果为 -10。

    * 乘法 `expr $num1 \* $num2` 结果为  200。

    / 除法 `expr $num1 /  $num2` 结果为 2。

    % 取余 `expr $num1 % $num2` 结果为 0。

    = 赋值 num1=$num2 将把变量 num2 的值赋给 num1。

    == 相等。用于比较两个数字,相同则返回 true(真)。 [ $num1 == $num2 ] 返回 false(假)。

    != 不相等。用于比较两个数字,不相同则返回 true。 [ $num1 != $num2 ] 返回 true。

    注意:条件表达式要放在方括号之间,并且要有空格,

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    例,两个数相加:

     

    2、关系运算符:只支持数字,不支持字符串,除非字符串的值是数字。

    变量 num1 = 10, num2 = 20:

    -eq 检测两个数是否相等,相等返回 true。 [ $num1 -eq $num2 ] 返回 false。

    -ne 检测两个数是否相等,不相等返回 true。 [ $num1 -ne $num2 ] 返回 true。

    -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $num1 -gt $num2 ] 返回 false。

    -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $num1 -lt $num2 ] 返回 true。

    -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $num1 -ge $num2 ] 返回 false。

    -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $num1 -le $num2 ] 返回 true。

    -eq:equal

    -ne:not equal

    -gt:great than

    -lt:less than

    -ge:great than or equal

    -le:less than or equal

    3、逻辑运算符

    变量 num1 = 10, num2 = 20:

    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。

    -o 或(或者)运算,有一个表达式为 true 则返回 true。 [ $num1 -lt 20 -o $num2 -gt 100 ] 返回 true。

    -a 与(并且)运算,两个表达式都为 true 才返回 true。 [ $num1 -lt 20 -a $num2 -gt 100 ] 返回 false。

     

    4、字符串运算符

    变量 str1 = "abc", str2 = "efg":

    = 检测两个字符串是否相等,相等返回 true。 [ $str1 = $str2 ] 返回 false。

    != 检测两个字符串是否相等,不相等返回 true。 [ $str1 != $str2 ] 返回 true。

    -z 检测字符串长度是否为0,为0返回 true。 [ -z $str1 ] 返回 false。

    -n 检测字符串长度是否为0,不为0返回 true。 [ -n $str1 ] 返回 true。

    str 检测字符串是否为空,不为空返回 true。 [ $str1 ] 返回 true。

    5、文件测试运算符:用于检测 Unix/Linux 文件的各种属性。

    -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。

    -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。

    -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。

    -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。

    -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。

    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。

    -p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。

    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。

    -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。

    -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。

    -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。

    -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。

    -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

    4、shell脚本附带选项

    传递:./test.sh  a  b  c

    接收:“$0”:执行脚本文件./test.sh  ;“$1”来表示a,“$2”来表示b,以此类推。

  • 相关阅读:
    UNIAPP实战项目笔记47 显示默认收货地址和修改收货地址页面的布局
    【React】类excel表格的开源项目handsontable
    Docker搭建Mysql主从复制
    K8s进阶6——pod安全上下文、Linux Capabilities、OPA Gatekeeper、gvisor
    ONVIF协议网络摄像机(IPC)客户端程序开发使用ONVIF框架代码(C++)生成静态库04-->Windows
    RK3399平台开发系列讲解(内存篇)15.34、 Linux 进程内存布局
    一招教你控制python多线程的线程数量
    基于Java+SpringBoot+Thymeleaf+Mysql新冠疫苗预约系统设计与实现
    Java14新增特性
    JuiceFS 在多云架构中加速大模型推理
  • 原文地址:https://blog.csdn.net/weixin_43730921/article/details/127632490