Linux 之 shell 编程
阅读原文时间:2023年08月13日阅读:1

Linux 之 shell 编程学习笔记(并不完全正确,有误请指正)

脚本概念

脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的 可执行文件

运行脚本要求

脚本须有 可执行 权限,即 x 权限

内容格式:以#!/bin/bash开头

脚本的执行方式

法一(需可执行权限)

赋予脚本可执行权限:chmod u+x [脚本]

在 有可执行权限 的前提下,使用./[脚本] 或 直接输入脚本的绝对路径 [绝对路径] 即可运行脚本

法二(无需可执行权限)

直接使用sh [脚本]命令运行脚本

shell 的变量

Linux shell 的变量分为 系统变量 和 用户变量

常见系统变量:\$HOME 、\$PWD 、\$PATH 、\$USER 、$SHELL 等

常用命令

set

查看当前shell中所有变量

unset [变量]

撤销变量

echo $[变量]

查询变量的值

基本规则

与其他语言规则大同小异

注意:等号两侧 不能有空格

变量名一般习惯为大写(约定俗成)

基本语法

1. 定义变量:[变量名]=[值](中间不能有空格)

2. 撤销变量:unset [变量]

3. 定义静态变量:readonly [变量名]=[值] (静态变量不能被撤销,即不能被 unset )

4. 将命令的结果赋给变量:[变量名]=`[命令]` 或[变量名]=$([命令]) (第一种写法中 ` 号为 tab 键上面的键

5. 输出变量时带上 $ 符号,即 echo $[变量]

位置参数变量

例如:

传参,输出:

预定义变量

例如:

注意:第二行 & 符号表示 以后台方式运行

输出:

shell 的多行注释

格式

:<<![内容]!

shell 的运算符

shell 运算的三种方法

法一(不好用)

[变量]=$(([表达式]))

法二(好用)

[变量]=$[[表达式]]

法三(难用)

[变量]=`expr[简单表达式]`

!!!注意:` 号为反引号

数字与符号 间有空格

* 号前必须带转义字符 \

shell 的条件判断

判断语句

[ condition ] // 非空 返回 true ,空 返回 false

可用echo $?查询上一条判断是否执行成功( 0 为 true ,>1 为 false )

注意:condition 前后有 空格

三元运算符

[ condition ] && [语句1] || [语句2]

若 condition 满足,则执行语句1

两个整数之间比较

= 字符串比较

-lt 小于(less than)

-le 小于等于(less equal)

-eq 等于(equal)

-gt 大于(greater than)

-ge 大于等于(greater equal)

-ne 不等于(Not equal)

按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence)

-d 文件存在并是一个目录(directory)

shell 的流程控制

if条件判断

!!!注意:condition 前后必须有 空格,即使没有 condition 也要有空格

基本语法
单分支
#单分支

if [ condition ]

then

        [符合该条件执行的语句]

fi

例如:

多分支
#多分支

if [ condition ]

then

        [符合该条件执行的语句]

elif [ condition ]

then

        [符合该条件执行的语句]

else

        [符合该条件执行的语句]

fi

例如:

case选择语句

基本语法
case $1 in

"[条件]")

        [符合该条件执行的语句]

;;                 // ;; 符号代表 结束

"[条件]")

        [符合该条件执行的语句]

*)                 //如果没有符合上面条件的值,则执行这段代码

        [符合该条件执行的语句]

esac

例如:

输出:

for 循环

基本语法1
for [变量] in [值]

do

    [代码块]

done

例如:

基本语法2
for (([初始值];[循环控制条件];[变量的变化]))

do

    [代码块]

done

例如:

while 循环

基本语法
while [ 条件 ] //注意 条件 前后有空格

do

    [代码块]

done

例如:

read 读取控制台的输入

基本语法

read -p "[提示语]"

指定输入时的提示语

read -t [秒]

指定输入的等待时间

例如:

shell 的函数

系统函数

basename 基本语法

basename [文件路径]

获取文件名

basename [文件路径] [后缀]

获取文件名(不带后缀)

例如:

dirname 基本语法

dirname [文件绝对路径]

获取文件的路径

例如:

自定义函数

基本语法
function [函数名]{

    [代码块]

}

例如:

函数调用
[函数名] [参数]

例如: