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 $[变量]

位置参数变量

例如:

传参,输出:

预定义变量

例如:

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

输出:

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 [函数名]{

	[代码块]

}

例如:

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

例如:

Linux 之 shell 编程的更多相关文章

  1. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  2. Linux下Shell编程

    Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...

  3. 【Hadoop离线基础总结】linux的shell编程

    linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...

  4. linux中shell编程

    shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...

  5. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

  6. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  7. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  8. 3. Linux的shell编程

    Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...

  9. Linux之shell编程的基本使用

    1.Shell shell是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的系统级程序 2.shell编程打印hello world 2.1 代码部分 #!/bin/ba ...

  10. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

随机推荐

  1. 2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1、a2、…、an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成

    2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1.a2.-.an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成 ...

  2. 2021-04-23:TSP问题 有N个城市,任何两个城市之间的都有距离,任何一座城市到自己的距离都为0。所有点到点的距 离都存在一个N*N的二维数组matrix里,也就是整张图由邻接矩阵表示。现要求

    2021-04-23:TSP问题 有N个城市,任何两个城市之间的都有距离,任何一座城市到自己的距离都为0.所有点到点的距 离都存在一个N*N的二维数组matrix里,也就是整张图由邻接矩阵表示.现要求 ...

  3. 2022-02-13:k8s安装gitlab,yaml如何写?

    2022-02-13:k8s安装gitlab,yaml如何写? 答案2022-02-13: yaml如下: apiVersion: apps/v1 kind: Deployment metadata: ...

  4. 【Clickhouse】ReplaceingMergeTree引擎final实现合并去重探索

    前言 在OLAP实践中,在有数据更新的场景中,比如存储订单数据,我们经常会用到ReplaceingMergeTree引擎来去重数据,以获取数据的最新状态.但是ReplaceingMergeTree引擎 ...

  5. 案例实践 | 某能源企业API安全实践

    随着智能电网.全球能源互联网."互联网+电力".新电改的全面实施,分布式能源.新能源.电力交易.智能用电等新型业务不断涌现,运营模式.用户群体都将发生较大变化,电力市场由相对专业向 ...

  6. S32DS学习日志:debug文件和烧录的.hex文件

    工程导入之后先clean一下,重新编译生成的文件默认在Production文件下面,得重新设置 折腾半天用jlink烧录没反应,原来是这里错了. production下的文件是用来用来集成bootlo ...

  7. Neo4J 图库的集群部署与基础使用

    Ned4J 图库的集群部署与基础使用 部署机器 名称 配置 IP server1 8 核 16G 172.16.0.2 server2 8 核 16G 172.16.0.3 server3 8 核 1 ...

  8. 智能合约HardHat框架环境的搭建

    1.首先创建一个npm项目 PS C:\Users\lcds\blockchainprojects> mkdir hardhatcontract PS C:\Users\lcds\blockch ...

  9. 实时光线追踪(3)Ray Casting

    目录 硬件光追(Hardware Ray Tracing) 加速结构(Acceleration Structure,AS) AS 策略 Ray Tracing Pipeline Ray Generat ...

  10. ClickHouse数据表迁移实战之-remote方式

    1 引言 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).我们内部很多的报表.数据看板都基于它进行开发.今天为大家带来remote方式的ClickHouse数据表迁 ...