首页 > 其他分享 >学习笔记3

学习笔记3

时间:2023-09-24 15:22:55浏览次数:51  
标签:语法 shell 变量 判断 笔记 学习 sh bash

第十章:sh编程介绍

第十章的主要内容是研究sh编程。对于sh编程的介绍分为以下几个方面:

1. sh脚本的编写

脚本格式以#!/bin/bash开头(指向解释器)

2. sh控制语句

2.1 脚本格式

脚本格式以#!/bin/bash开头(指向解释器)

2.2 第一个shell脚本,helloworld.sh,输出helloworld!

2.3 执行方式

方式一:shbash + 相对或绝对的文件路径(不需要 +x)

方式二:直接输入脚本的相对或绝对路径(需授可执行权限 +x)

方式三:在脚本的路径前面,使用一个. 或一个 source(这种方式不同于以上2种,以上两种运行时会嵌套子shell,这个不会嵌套,就在本环境运行,开子shell与不开子shell的区别在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell中是不可见的)

2.4 变量

2.4.1 系统预定义变量

a. 常用的系统变量(这里大多数都是写全局的环境变量): $HOME, $PATH, $SHELL等, $PWD

2.4.2 自定义变量

a. 基本语法:

  • 定义变量:变量名=变量值,注意:=前后不能有空格
  • 撤销变量:unset 变量名
  • 申明静态变量:readonly 变量,注意:不能unset

b. 变量定义的规则:

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
  • 等号两侧不能有空格
  • 在bash中,默认变量都是字符串类型,无法直接进行数值运算。
  • 变量的值如果有空格,需要使用双引号或者单引号给括起来。

c. 案例实操:

(1)下图中设置的变量时局部变量(比如,在当前环境设置后,在子bash中就访问不到)

(2)设置为全局变量
步骤1:先设置局部变量
步骤2:export 变量 注:意思就是把父shell中的变量导出变成一个全局变量
注意:子bash中更改的的全局变量,只在子bash中有效,退出子bash后无效

2.4.3 特殊变量

a. 位置参数:$n
(1)基本语法:
$n(功能描述:n为数字,$0代表脚本名称,$1-$9代表一到九个参数,十以上的要用大括号包含${10}

b. 参数个数:$#
(1)基本语法:
$#(获取所有输入参数的个数,常用于循环,判断参数个数是否正确以及加强脚本的健壮性)

c. 获取参数:$*$@
(1)基本语法
$*:这个变量代表命令行中所有的参数, $*把所有的看成一个整体
$@:这个变量代表命令行中所有的参数,不过$@把每个参数区分对待

d. 返回状态:$?
(1)基本语法
$?:最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

3. 运算符

(1)基本语法
$((运算式))$[运算式]

4. 条件判断

(1)基本语法
a. test condition
b. [ condition ] 注意:condition前后要有空格
注意:1.条件非空返回true,否则返回false;2.记得加空格,不然程序会认为是一个值

c. 常用判断条件
(1)两个整数之间比较

  • -eq:等于(equal)
  • -ne:不等于(not equal)
  • -lt:小于(less than)
  • -le:小于等于(less equal)
  • -gt:大于(greater than)
  • -ge:大于等于(greater equal)
    注:如果四字符串之间的比较,用"="判断相等,用"!="判断不等
    (2)按照文件权限进行判断
  • -r:有可读权限(read)
  • -w:有可写权限(write)
  • -x:有可执行权限(execute)
    (3)按照文件的类型进行判断
  • -e:文件存在(existence)
  • -f:文件存在且是一个常规的文件(file)
  • -d:文件存在且是一个目录(directory)
    (4)多条件判断
  • &&:表示前一个命

令执行成功时,才执行后一条命令

  • ||:表示上一条命令失败后,才执行下一条命令
  • -a:即all同&&,但是&&不能在 [] 中使用,示例:[ $age -gt 18 -a $age -lt 35 ]
  • -o:即or同||,但是||不能在 [] 中使用,示例:[ $age -gt 18 -o $age -lt 35 ]

[ … ] && … || … 其实就是if…else…语句了

d. 案例实操

5. 流程控制(重点)

  • 5.1、if判断(双分支的逻辑结构,二叉树)

a. 基本语法
(1)单分支

if [ 条件判断式 ]; then  #分号表示一行出现2步命令的实现
 程序
fi

或者

if [ 条件判断式 ]
then
 程序
fi

(2)多分支

if [ 条件判断式 ]
then
 程序
elif [ 条件判断式 ]
then
 程序
else
 程序
fi

b. 案例实操

  • 5.2、case语句(多分支的逻辑结构,多叉树)

a. 基本语法

case $变量名 in
    “值1”)
    如果这个值等于值1,则执行程序1
    ;;
    “值2”)
    如果这个值等于值2,则执行程序2
    ;;
    …省略其它分支…
    )
    如果变量的值都不是以上的值,则执行此程序
    ;;
esac

注意事项:
(1)case行尾必须为单词"in",每个模式必须以右括号")“结束。
(2)双分号”;;“表示命令序列结束,相当于java中的break
(3)最后的”"表示默认模式,相当于java中的default

b. 案例实操

  • 5.3、for循环

a. 基本语法1

for (( 初始值;循环控制条件;变量变化 ))
do
    程序
done


大家会发现他报错了,我仔细检查并更改了很多次之后还是报错,于是在菜鸟教程里找到了解决方案,即用bash命令而不是sh命令运行脚本。

b. 基本语法2

for 变量 in 值1 值2 值3
do
    程序
done

c. 操作实例2

增强for循环

  • 5.4、while循环(条件判断循环)

a. 基本语法

while [ 条件判断式 ]
do
    程序
done.

b. 案例实操

6. read读取控制台输入

a. 基本语法

read (选项) (参数)

选项:

  • -p:指定读取值时的提示符
  • -t:读取超时时间(超时退出)

参数:

  • 变量:指定读取值的变量名

b. 案例实操

7. 函数

7.1 系统函数

玩一个比较典型的函数basename

basename [string/pathname] [suffix]

功能描述:basename命令会删掉所有前缀,包括最后一个('/'字符),然后将字符显示出来。basename可以理解为获取路径里的文件名称。

选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

7.2 自定义函数

a. 基本语法

[function] funname[()]
{
    Actiion;
    [return int;]
}

b. 经验技巧

  • 必须在调用之前先申明函数,先申明函数,shell脚本是逐行运行(解释性语言)。不会像其它语言一样先去编译。
  • 函数返回值,只能通过$?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果作为返回值。return后跟数值0-255

c. 案例实操


Chatgpt苏格拉底提问


遇到的问题:

在shell语法使用部分,书上的内容讲解较为模糊,很多地方我并不能听懂,实践起来亦有困难。

解决方案:

通过菜鸟教程、博客园、csdn等平台搜索有关知识点最终掌握了基本的语法

标签:语法,shell,变量,判断,笔记,学习,sh,bash
From: https://www.cnblogs.com/lududuze/p/17726012.html

相关文章

  • 学习笔记3
    学习笔记3一门程序设计语言具有以下必备的要素和技能:语法:了解语言的基本语法规则,包括变量、数据类型、运算符、控制流程(如条件语句和循环语句)、函数定义等。数据结构:理解常见的数据结构,如数组、链表、栈、队列、树、图等,并能够灵活地应用于实际问题中。算法:掌握常见的算法思......
  • 信息安全系统设计与实现课程第十章学习笔记
    一、知识点总结1、sh脚本sh脚本是一种文本文件,包含一系列sh语句,用于执行一系列命令。它是一种脚本语言,通常以.sh为文件扩展名。脚本的执行需要使用shell解释器,比如Bash、csh、ksh等。脚本的基本结构如下:#!/bin/bash#Thisisacommentecho"Hello,World!"在这个示例中,#!/......
  • 学习笔记3
    第10章sh编程——教材知识点归纳这一章课本为我们介绍的是sh编程内容,sh是一种脚本,是一种可以实现在linux中批量执行命令的文件。10.1~10.2sh脚本、sh脚本和C程序sh是Linux下进行批处理的脚本,我觉得它类似于windows下的bat脚本。可见sh脚本的逻辑和C语言等程序设计语言有很多......
  • 学习笔记3
    知识点归纳无论是Python、C、Java还是其他编程语言,程序设计语言通常都有一些共同的必备要素和技能。这些要素和技能在shell脚本中也可以找到对应,尽管shell脚本是一种脚本语言,与通用编程语言有些不同,但也具备类似的元素和技能。以下是一些必备的要素和技能:语法编写规范的代码:......
  • 学习笔记3
    知识点归纳一门程序设计语言的必备要素和技能可以总结为以下几点:语法:掌握语言的基本语法规则,包括变量的声明和赋值、控制结构(条件语句、循环语句等)、函数和类的定义等。数据类型:了解语言提供的不同数据类型,如整数、浮点数、字符串、数组、列表、字典等,并能灵活地运用它们。......
  • 学习笔记三
    一、任务详情自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如何呈现出来的?知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)...(知......
  • 学习笔记3
    第十章sh编程1.一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如何呈现出来的?-要素:数据类型、常量、变量、运算符、表达式、标识符、关键字、数组、基本控制结构、函数、输入和输出、解释器和编译器-技能:数据结构分析和设计算法分析和设计系统......
  • 《信息安全系统设计与实现》第三周学习笔记
    《信息安全系统设计与实现》第三周学习笔记第十章sh编程sh脚本sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。例如创建一个文本文件mysh,包含:#!/bin/bash#commentlineechohello用chmod+xmysh使其可执行sh脚本与C程序sh是一个解释......
  • x86汇编学习
    sal为算术左移,保持符号位不变。shl为逻辑左移,为无符号左移,最高位直接被次高位覆盖。对应的右移分别为sar,shr。参考[https://blog.csdn.net/deniece1/article/details/](https://blog.csdn.net/deniece1/article/details/103274744#汇编语言中sal(算术左移指令)和shl(逻辑左移指......
  • Oracle process/session/cursor/tx/tm的简单学习
    Oracleprocess/session/cursor/tx/tm的简单学习Oracle的部署模式Oracle安装时有专用模式和共享模式的区别共享模式(Sharedmode):在共享模式下,会话可以同时读取数据库的数据,多个会话可以并发地进行读取操作。这意味着多个会话可以共享相同的数据快照,并且彼此之间不会阻塞。......