我可以不吃啊 发表于 2023-8-14 15:26:13

Linux 之 shell 编程

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

概念性知识点

脚本概念

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

脚本须有 可执行 权限,即 x 权限
内容格式:以#!/bin/bash开头
脚本的执行方式

法一(需可执行权限)

赋予脚本可执行权限:chmod u+x [脚本]
在 有可执行权限 的前提下,使用./[脚本] 或 直接输入脚本的绝对路径 [绝对路径] 即可运行脚本
法二(无需可执行权限)

直接使用sh [脚本]命令运行脚本
shell 编程知识点

shell 的变量

Linux shell 的变量分为 系统变量 和 用户变量
常见系统变量:\$HOME 、\$PWD 、\$PATH 、\$USER 、$SHELL 等
常用命令

set查看当前shell中所有变量unset [变量]撤销变量echo $[变量]查询变量的值基本规则

与其他语言规则大同小异
注意:等号两侧 不能有空格
变量名一般习惯为大写(约定俗成)
基本语法

1. 定义变量:[变量名]=[值](中间不能有空格)
2. 撤销变量:unset [变量]
3. 定义静态变量:readonly [变量名]=[值] (静态变量不能被撤销,即不能被 unset )
4. 将命令的结果赋给变量:[变量名]=`[命令]` 或[变量名]=$([命令]) (第一种写法中 ` 号为 tab 键上面的键
5. 输出变量时带上 $ 符号,即 echo $[变量]
位置参数变量

https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134442374-159527378.png
例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134501279-1830369657.png
传参,输出:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134519553-1915367788.png
预定义变量

https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134658621-1791249574.png
例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134747664-1692364810.png
注意:第二行 & 符号表示 以后台方式运行
输出:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723134810163-825302778.png
shell 的多行注释

格式

<strong>:
shell 的运算符

shell 运算的三种方法

法一(不好用)

[变量]=$(([表达式]))
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723135130587-1060944778.png
法二(好用)

[变量]=$[[表达式]]
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723135458882-771971900.png
法三(难用)

[变量]=`expr[简单表达式]`
!!!注意:` 号为反引号
数字与符号 间有空格
* 号前必须带转义字符 \
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723135418414-292159428.png
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例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723141047296-550442220.png
多分支

#多分支

if [ condition ]

then

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

elif [ condition ]

then

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

else

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

fi例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723141410859-1295806029.png
case选择语句

基本语法

case $1 in

"[条件]")

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

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

"[条件]")

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

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

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

esac例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723141556341-1968548984.png
输出:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723141617778-1792920784.png
for 循环

基本语法1

for [变量] in [值]

do

        [代码块]

done例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723141923689-1441728085.png
基本语法2

for (([初始值];[循环控制条件];[变量的变化]))

do

        [代码块]

done例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723142012977-2036886210.png
while 循环

基本语法

while [ 条件 ] //注意 条件 前后有空格

do

        [代码块]

done例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723142137991-675729451.png
read 读取控制台的输入

基本语法

read -p "[提示语]"指定输入时的提示语read -t [秒]指定输入的等待时间例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723142217054-143249107.png
shell 的函数

系统函数

basename 基本语法

basename [文件路径]获取文件名basename [文件路径] [后缀]获取文件名(不带后缀)例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723230437926-1555170604.png
dirname 基本语法

dirname [文件绝对路径]获取文件的路径例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723230453643-1833289557.png
自定义函数

基本语法

function [函数名]{

        [代码块]

}例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723230627466-1286186296.png
函数调用

[函数名] [参数]例如:
https://img2023.cnblogs.com/blog/3246266/202307/3246266-20230723230641340-820753711.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Linux 之 shell 编程