AI智能
改变未来

linux-shell编程基础(基本语法)


1 shell编程用途

通过终端编写脚本程序,辅助开发人员完成工程自动化操作

2 编写规范

  • 脚本程序是Unix/Linux系统中的特殊文件,需要妥善管理
  • 放在指定路径的scripts/目录下
  • 后缀名统一使用.sh
  • 第一行代码 #!/bin/bash 指定程序执行

3 执行方式

  • 通过命令执行bash 文件名
  • sh 文件名
  • 直接执行(需要执行权限)
      ./文件名

    4 注释

    • 除第一行的#!/bin/bash,单行注释以 # 开头
    • 多行注释(多行注释方法较多,这里只是其中一种):<<自定义字符 注释内容 自定义字符

    5 标准输出

    • 打印完换行echo “要打印的信息”
  • 打印完不换行
      echo -n “要打印的信息”
  • 可以不加双引号,但规范写法要添加
  • 6 标准输入

    • 显示输入信息:read -p “提示信息”
  • 不显示输入信息
      read -s “提示信息”

    7 变量

    • 命名规则遵循变量命名规则(见名知义、字母数字下划线组成、数字不能开头)
  • 赋值
      变量名=值
    • 两边不需要空格
    # 可以用双引号也可以不用双引号name=Jack
    • 使用变量在变量名前面添加 $ 符号 \”
    • 与其他字符串拼接使用 ${name}_001
    echo \"name:$nameecho \"${name}_001\"
    • 引号双引号-强引用:输出赋值
    • 单引号-弱引用:不输出赋值

    8 选择结构

    8.1 单分支结构

    • 判断表达式中符号的两端或**[ ]内两端**要有空格,赋值没有空格
    if 条件then条件为True执行的代码fi

    8.2 双分支结构

    if [ 条件1 ];then条件1为True执行的代码else条件不满足执行代码fi

    8.3 多分支结构

    if [ 条件1 ];then条件1为True执行的代码elif [ 条件2 ];then条件2为True执行的代码elif ....else任何条件都不满足执行的代码fi

    8.3 判断符号

    8.3.1 文件判断

    • 判断文件是否存在 if [ -e 文件路径 ]
    • 判断是否文件 if [ -f 文件路径 ]
    • 判断是否文件夹 if [ -d 文件路径 ]
    • 判断文件是否可读 if [ -r 文件路径 ]
    • 判断文件是否可写 if [ -d 文件路径 ]
    • 判断文件是否可执行 if [ -x 文件路径 ]

    8.3.2 字符串判断

    • 判断两个字符是否相等 if [ s1 = s2 ]
    • 判断两个字符是否不相等 if [ s1 != s2 ]
    • 判断字符串长度是否为0 if [ -z s ]
    • 判断字符串是否为空 if [ -n s ]

    8.3.3 整数判断

    • 判断是否相等 [ num1 -eq num2 ]
    • 判断是否不相等 [ num1 -eq num2 ]
    • 判断是否大于 [ num1 -eq num2 ]
    • 判断是否小于 [ num1 -eq num2 ]
    • 判断是否大于等于 [ num1 -eq num2 ]
    • 判断是否小于等于 [ num1 -eq num2 ]

    8.3.4 逻辑判断

    • 并且关系 [ a && b ] 或 [ a -a b ]
    • 或者关系 [ a || b ] 或 [ a -o b ]
    • 取反 [ ! a ]

    8.4 case流程控制

    case 变量 in变量1)代码1;;变量2)代码2;;*)全部都没有匹配成功的代码;;esac

    9 循环结构

    9.1 for循环

    for 临时变量 in (数据组)do循环执行代码done

    9.2 while循环

    while 条件do循环执行的代码done

    10 整数运算

    • 运算符号求和 num1 + num2
    • 求差 num1 – num2
    • 求积 num1 * num2 或 num1 * num2
    • 求商 num1 / num2
    • 取余 num1 % num2
  • 表达式
      expr 表达式
      expr num1+num1+num1+num2 # 操作符号两边不加空格是拼接
      expr $num1 + $num2 # 相加(其他运算同理)
      expr $num1 \\ $num2* # expr乘法运算*不能直接使用,否则会报错,需要转义后才能相乘
    • $(()) 表达式,可以直接运算,可以赋值res=$((num1 + num2))
  • $[] 表达式,可以直接运算,可以赋值
      res=$[num1+num2]
  • let 关键字
  • let i++let num+=1

    11 函数

    11.1 函数声明

    • 标准语法
    function 函数名称(){函数中的代码}
    • 简洁方式
    函数名称(){函数中的代码}
    • shell中函数参数传递有自己的方式,不要在括号内添加形式参数

    11.2 函数调用

    • 直接使用函数名称调用,后面不需要加()

    11.3 函数传递

    • 参数不需要在函数内声明,直接通过函数获取
    • 调用函数的同时传递参数,参数直接放在函数名称后面,用空格分隔
    函数名 参数1 参数2 参数3

    11.4 函数返回值

    • $* 获取所有的参数
    • $@ 获取所有的参数
    • $# 获取参数的个数
    • $n 获取第n个参数
    • $? 获取上一个命令或五福执行结果,返回0,执行正常或服务运行中,返回1,执行不正常,返回3,服务已停止;返回4,服务不存在

    12 命令替换

    先完成 里面的命令行,然后将其结果替换出来

    `pwd`
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » linux-shell编程基础(基本语法)