首页 > 其他分享 >第三周学习笔记

第三周学习笔记

时间:2023-09-24 11:11:17浏览次数:36  
标签:脚本 Shell 变量 第三周 笔记 学习 命令 sh 执行

sh编程

1.sh脚本

Shell脚本是一种用于在Unix、Linux和其他类Unix系统上编写和执行命令序列的脚本语言。它使用Shell解释器(如sh、bash、csh等)来解释和执行脚本。Shell脚本可以包含一系列命令、控制结构、变量和函数,用于完成特定的任务或自动化一系列操作。通过编写Shell脚本,你可以将一组命令和操作组织在一起,以便重复使用、批量处理或自动化任务。

2.sh脚本与c程序

相同点
  • 变量:无论是Shell脚本还是C程序,都支持变量的使用。变量用于存储和操作数据,在程序执行过程中可以进行赋值、引用和修改。
  • 控制结构:Shell脚本和C程序都支持条件语句和循环结构,用于根据条件执行不同的操作或重复执行一系列操作。无论是if-else语句、for循环还是while循环,它们在Shell脚本和C程序中的基本语法和用法是相似的。
  • 函数:尽管Shell脚本和C程序的函数机制有所不同,但它们都支持函数的定义和调用。函数用于封装一组相关的操作,以实现代码的模块化和重用。
区别
  • Shell脚本是一种脚本语言,而C程序是一种编译型语言。
  • Shell脚本是解释执行的,需要通过Shell解释器解释并执行脚本。C程序需要经过编译器的编译,生成可执行文件后才能运行。
  • Shell脚本中的变量无需事先声明,可以直接使用,且不需要指定数据类型。C程序中的变量需要先声明后使用,且需要指定数据类型。

3. sh命令行参数

在Shell脚本中,可以通过命令行参数向脚本传递额外的信息和参数。Shell脚本可以通过特殊的变量来获取和处理这些命令行参数。

$0 表示脚本本身的名称,即脚本文件的路径
$1$2$3 表示命令行参数的位置参数。$1表示第一个参数,$2表示第二个参数,依此类推。例如,如果执行脚本时使用了命令 ./script.sh arg1 arg2,那么$1arg1$2arg2
$# 表示命令行参数的个数。例如,$#为2表示有两个命令行参数。
$* 表示所有的命令行参数,以列表形式展示。

sh变量

在Shell脚本中,变量的声明和使用是比较灵活的,可以直接进行赋值而无需显式声明变量的类型。

A=variable

4.sh命令

sh有许多内置命令,这些命令由sh执行,不需要创建一个新进程。sh可以执行所有的Linux命令。其中,有些命令几乎已经成为sh不可分割的一部分,因为它们广泛用于sh脚本中。

内置命令
命令 含义
.file 读取并执行文件
break[n] 从最近的第n个嵌套循环中退出
continue[n] 重启最近的第n个嵌套循环
cd[dirname] 更换目录
eval[arg...] 计算一次参数并让sh执行生成的命令
exec[arg...] 通过这个sh执行命令,sh将会退出
exit[n] 使sh退出,退出状态为n
export[var...] 将变量导出到随后执行的命令
read[var...] 从stdin中读取一行并为变量赋值
set [arg...] 在执行环境中设置变量
shift 将命令行参数向左移动
trap[arg][n] 接收到信号n后执行参数
umask[ddd] 将掩码设置为八进制数 ddd 的
wait[pid] 等待进程pid,如果没有给出pid,则等待所有活动子进程
read 当sh执行read命令时,它会等待来自stdin的输人行
Linux命令
命令 含义
echo 将参数字符串作为行回显到stdout。它通常将相邻的多个空格压缩为一个空格,除非有引号。
expr 所有的sh变量都是字符串,所以我们不能直接把它们改为数值
awk 数据处理程序
cmp 比较两个文件
comm 选择两个排序文件共有的行
grep 匹配一系列文件的模式
diff 找出两个文件的差异
join 通过使用相同的键来连接记录以比较两个文件
sed 流或行编辑命令
sort 排序或合并文件
tail 打印某个文件的最后n行
tr 一对一字符翻译
uniq 从文件中删除连续重复行
管道命令

sh脚本经常使用管道作为过滤器

ps -ax | grep httpd 
cat file | grep word

5.命令替换

命令替换是一种在Shell脚本中使用的技术,用于将命令的输出结果嵌入到另一个命令或表达式中。

# 使用命令替换获取文件列表并进行循环处理
files=$(ls)
for file in $files; do
    echo "处理文件:$file"
done

6.控制语句

  • 条件语句:
    条件语句根据给定的条件来执行不同的代码块。
if condition
then
    # 条件为真时执行的代码块
else
    # 条件为假时执行的代码块
fi
if condition1
then
    # 执行条件1为真时的操作
elif condition2
then
    # 执行条件2为真时的操作
elif condition3
then
    # 执行条件3为真时的操作
else
    # 执行所有条件都为假时的操作
fi
  • 循环语句:
    循环语句允许重复执行一段代码块,直到满足指定的条件。
for variable in list
do
    # 代码块
done
while condition
do
    # 代码块
done
until condition
do
    # 代码块
done
  • case语句:
    case语句根据一个变量的值,在一系列模式匹配中选择执行相应的代码块。
case variable in
    pattern1)
        # 代码块1
        ;;
    pattern2)
        # 代码块2
        ;;
    pattern3)
        # 代码块3
        ;;
    *)
        # 默认代码块
        ;;
esac

7.I/O重定向

I/O重定向是一种在Shell中管理输入和输出流的机制。它允许将命令的输入或输出重定向到文件或其他流,以便对其进行处理或存储。

  • 输入重定向(<):
    通过输入重定向,可以将命令的输入从文件中读取而不是从标准输入(键盘)中读取。
command < input_file

示例:

# 从input.txt文件中读取内容并传递给cat命令
cat < input.txt
  • 输出重定向(>):
    通过输出重定向,可以将命令的输出写入文件而不是显示在标准输出(终端)上。
command > output_file

示例:

# 将ls命令的输出写入到output.txt文件中
ls > output.txt
  • 追加输出重定向(>>):
    追加输出重定向与输出重定向类似,但是它将命令的输出追加到文件的末尾,而不是覆盖文件中的内容。
command >> output_file

示例:

# 将date命令的输出追加到log.txt文件的末尾
date >> log.txt

8.sh函数

在Shell脚本中,函数是一种用于封装一段可重复使用的代码块的机制。通过定义函数,可以将一系列命令组织在一起,并在需要时进行调用。

#!/bin/bash

# 定义函数
function greet {
    echo "Hello, $1!"
}

# 调用函数
greet "Alice"

9.sh中的通配符

  1. 星号通配符:sh中最常用的通配符*,可以拓展到目录中的所有文件
  2. file*:列出当前目录中所有文件信息
  3. ls*.c:列出当前目录中所有以.c结尾的文件
  4. file???:有三个字符的所有文件名
  5. ls*.??:一个点号.后有2个字符的所有文件名
  6. file*[ab]*:包含a或b的所有文件名
  7. ls*[xyz]*:列出所有包含x、y、z的文件名
  8. ls*[a-m]*:列出包含a到m范围内字符的所有文件名

问题解决思路

Shell脚本执行失败
脚本执行失败是一种非常常见的问题。通常,它会出现一些错误提示信息,如“command not found”、“permission denied”等。
这些错误提示信息意味着命令无法正确执行。解决这种问题的方法是检查Shell脚本中的命令是否正确、拥有足够的权限、以及相
关的环境变量是否设置正确。

Shell脚本中的变量
在Shell脚本中,可以使用变量来存储数据,例如路径、文件
名等。当我们调用Shell脚本中的变量时,需要使用“$”符号来访问变量。如果我们忘记使用“$”符号,Shell脚本将无法正确识别变量,并可能导致错误。

Shell脚本中的循环
在Shell脚本中循环是一个常见结构,当我们使用循环时要注意变量的作用域和循环使用条件。

标签:脚本,Shell,变量,第三周,笔记,学习,命令,sh,执行
From: https://www.cnblogs.com/qi-yu-lin/p/17725720.html

相关文章

  • 学习笔记3
    第十章教材知识点Shell脚本:Shell脚本是一系列Shell命令的集合,以文本文件的形式保存,并通过Shell解释器执行。Shell脚本的文件扩展名通常为.sh。Shell脚本的第一行指定解释器,例如#!/bin/sh表示使用sh解释器。命令行参数:在Shell脚本中,可以通过特殊变量$0、$1、$2等来获......
  • 《Unix/Linux系统编程》教材第10章学习笔记
    大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?必备要素和技能:数据类型和变量:用于存储和处理数据的基本单元。控制结构:用于控制程序流程的结构,如条件语句、循环语句等。函数和模块:用于封装代码块......
  • 为什么要学习python技术??
    大家好,随着大数据时代的到来,相信大家对新时代的认知达到了一个新的高度,我们可以仔细观察我们的生活,似乎每一年都会发生较大的变化。我记得我刚上大学的时候,移动支付才刚开始普及,短短几年,出门只需要一部手机便能行走天下,其中计算机编程起到了重要作用。 我们为什么要学......
  • [笔记]$Python$输出笔记
    [笔记]\(Python\)输出笔记补位输出\(TypeI:\%\)格式化形式:\('format'\\\%\\'value'\)\(value\)可以是数字、字符串、变量等#数字型num=3s='%05d'%num#0代表用于分隔的数字,5代表输出总共占用5位print(s)#输出结果为00003,共占用5位注意:用\(0\)补位不会出现......
  • 学习笔记3
    关于知识点知识点归纳第十章10.1sh脚本sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。10.2sh脚本与C程序Shell脚本(sh脚本)和C程序是两种不同的编程语言和编程环境,它们有各自的特点和应用场景。Shell脚本(sh脚本):脚本语言:Shell脚本是一种脚本语言,通常......
  • 《动手学深度学习 Pytorch版》 7.7 稠密连接网络
    7.7.1从ResNet到DenseNetDenseNet可以视为ResNet的逻辑扩展。ResNet将函数展开为\(f(\boldsymbol{x})=x+g(\boldsymbol{x})\),即一个简单的线性项和一个复杂的非线性项。若将\(f\)拓展成超过两部分,则DenseNet便是其中一种方案。这即是DenseNet和ResNet的主要区......
  • 基于Yolov2深度学习网络的车辆检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述        车辆检测是计算机视觉领域中的一个重要问题。它在自动驾驶、智能交通系统、交通监控以及车辆计数等应用场景中起着至关重要的作用。近年来,深度学习在图像识别领域取得了显著的......
  • 畅购商城学习日志9.23
    "message":"Contenttype'text/plain;charset=UTF-8'notsupported"--畅购商城学习日志导航:目录"message":"Contenttype'text/plain;charset=UTF-8'notsupported"--畅购商城学习日志导航:1.问题描述:2.思路经历:3.产生原因:4.解决方法:方法一1......
  • java学习路线(一)
    各位晚上好,今天跟大家稍微说一下,对于小白,我认为的入门路线简述javaSE首先就是javaSE(也就是java基础语法,比如数据类型,集合,if,循环语句,多线程,异常捕获,反射等最基本操作,也是最重要的,万丈高楼平地起,这就相当于地基,所以兄弟们,一定不要偷懒)简述MySQL然后就是MySQL(众所周知,后端是必然少......
  • C语言学习记录---函数3
    声明#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>#include<time.h>#include<math.h>7.3递归与迭代7.3.1练习3:求n的阶乘。(不考虑溢出)参考代码:intFacl(intn){if(n>1){returnn=n*Facl......