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

学习笔记3

时间:2023-09-24 21:22:51浏览次数:30  
标签:语句 文件 笔记 echo 学习 命令 sh 执行

第10章 sh编程——教材知识点归纳

这一章课本为我们介绍的是sh编程内容,sh是一种脚本,是一种可以实现在linux中批量执行命令的文件。

10.1~10.2 sh脚本、sh脚本和C程序

sh是Linux下进行批处理的脚本,我觉得它类似于windows下的bat脚本。可见sh脚本的逻辑和C语言等程序设计语言有很多相似之处,教材将它与C语言进行了对比学习。虽然相似,但根本上是不同的,因为sh是脚本,是一个解释程序,而C语言却是能生成机器码的程序设计语言。

sh的执行和参数对应:

mysh   a  b  c  d
$0    $1 $2 $3 $4

10.3 命令行参数

使用sh命令时和运行程序时一样可以使用参数,如:

mysh one two three

其中有:

  • $# 为命令行参数从 $1$n 的数量。
  • $* 为所有命令参数。
  • $S 为执行sh命令的PID。
  • $? 为最后一个命令执行的退出状态。


10.4 sh变量

sh中也可以设置变量,A是一个变量,那么 $A 就代表A的值。

给变量赋值:使用 A="xxx" 即可。

B=A 将B分配(assign)到A。

B=$A 意为给B赋予A的值。

echo $A 输出显示A的值。

10.5~10.6 sh中的引号、sh语句

sh中想要将如 $/*>< 等的特殊字符用作普通字符,用 \ 来引用他们。类似C语言的转义。

sh包含所有Unix/Linux命令,以及可能的I/O重定向。



10.7 sh命令

10.7.1 sh内置命令

sh有一些内置命令,这些命令由sh执行,不创建新进程。以下是教材上的常用sh内置命令:

  • .file: 读取并执行文件
  • break[n]: 从最近的第n个嵌套循环中退出。
  • cd [dirname]: 更换目录。
  • continue [n]: 重启最近的第n个嵌套循环。
  • eval [arg…]: 计算一次参数并让sh执行生成的命令。
  • exec [arg...]: 通过这个sh执行命令,sh将会退出。
  • exit [n]: 使sh退出,退出状态为n。
  • export [var ...]: 将变量导出到随后执行的命令。
  • read [var ...]: 从stdin中读取一行并为变量赋值。
  • set [arg ...]: 在执行环境中设置变量。
  • shift: 将位置参数 $2 $3 重命名为 $1 $2
  • trap [arg] [n]: 接收到信号n后执行参数。
  • umask [ddd]: 将掩码设置为八进制数ddd的。
  • wait [pid]: 等待进程pid,如果没有给出pid,则等待所有活动子进程。

10.7.2 Linux命令

这些命令原是Linux本来的命令,非常常用的有echo命令、expr命令、管道命令等。

  • echo 命令:echo就是打印(显示)其后面的内容,多个空格压缩为一个。

  • expr 命令:sh变量都是字符串,无法改为数值,但expr命令可以实现转换、运算和回转换。

    如:

    I=123
    I=I+1
    

    执行后,I的值是字符串 "I+1" ,但如果使用下面的命令执行后:

    I=123
    I=$(expr $I + 1)
    

    变量I的值就变成了字符串 "124" 。

  • 管道命令:管道命令作为过滤器,如 cat file | grep word 就是从file中找到含有word的内容。

此外还有些别的实用命令,总结在此:

  • awk: 数据处理程序。
  • cmp: 比较两个文件。
  • comm: 选择两个排序文件共有的行。
  • grep: 匹配一系列文件的模式。
  • diff: 找出两个文件的差异。
  • join: 通过使用相同的键来链接记录以比较两个文件。
  • sed: 流或行编辑命令。
  • sort: 排序或合并文件。
  • tail: 打印某个文件最后n行。
  • tr: 一对一字符翻译。
  • uniq: 从文件中删除连续重复行。

10.8 命令替换

$A 会替换为A的值, $(cmd) 就是cmd执行后的内容的值。

10.9 控制语句

条件语句

if [condition1]; then
  statements
elif [condition2]; then
  statements
else
  statements
fi

循环语句

for语句:

for VARIABLE in str1 str2 ... strn
  do
    commands
  done


每次循环,for 后面都要接收其后面的一个变量值。

while语句

while [condition]
  do
    commands
  done

此外,还有 continue/break 语句,其用法和C语言类似,continue 开始下一个迭代,break 跳出循环。

10.10~10.11 I/O重定向

可以将输入输出流进行重定向

  • >file: stdout转向文件,如果文件不存在,将会创建文件。
  • >>file: stdout追加到文件。
  • <file: 将文件用作stdin;文件必须存在并具有r权限。
  • <<word: 从“here”文件中获取输入,直到只包含word的行。

10.12 sh函数

sh的函数和C等高级语言的写法类似。函数必须在任何可执行语句之前定义,没有函数原型

func()
{
  # function code
}

10.13~10.15 sh中的通配符、命令分组、eval语句

sh中的通配符

  • * 是通配符,可以配位所有字符。
  • ? 可以配对对应数量的字符。
  • [xyz] 配对中括号内的字符。

sh命令分组

类似于C语言,sh脚本可用 {}() 进行命令分组。{} 中语句在相同的环境下执行,() 在subsh进程中执行,不影响sh的工作目录。

eval语句

eval 是sh一个内置命令,对其后的参数进行一次计算。

a="cat file.txt" 时,直接写 $a 会出错,而 eval $a 就可以执行a。

10.16 调试sh脚本

-x 选项进行调试。如:

bash -x mysh

实践内容过程、问题解决过程

用sh脚本递归复制文件

参考了书上的方法和思想,实现了sh脚本递归复制文件。

代码如下:

cpf2f()
{
	if [ ! -e $1 ]; then
		echo "没有找到文件:"$1
		return 1
	fi
	if [ $1 -ef $2 ]; then
		echo "错误操作:复制给自己"
		return 1
	fi
	if [ -L $1 ]; then
		echo "复制"$1"..."
		link=$(readlink $1)
			ln -s $link $2
			return 0
	fi
	echo "复制$1给$2"
	cp $1 $2 2> /dev/null
}
cpf2d()
{
	newfile=$2/$(basename $1)
	echo "复制$1给路径$2"
	cpf2f $1 $newfile
}
cpd2d()
{
	echo "复制路径$1给路径$2"
	cp -r $1 $2
}

if [ "$#" != "3" ]; then
  echo "参数数目错误"
elif [ "$1" == "cpf2f" ]; then
  cpf2f $2 $3
elif [ "$1" == "cpf2d" ]; then
  cpf2d $2 $3
elif [ "$1" == "cpd2d" ]; then
  cpd2d $2 $3
else
  echo "错误使用"
fi

标签:语句,文件,笔记,echo,学习,命令,sh,执行
From: https://www.cnblogs.com/xuyuanqi/p/17726696.html

相关文章

  • Service mesh 学习02 Istio基础
    一、Istio架构概述1.Pilot提供服务发现和路由规则2.Mixer策略控制:服务调用限流3.citadel安全作用,可以保证服务间的通信安全4.Enovy代理:处理服务的流量二、自动注入sidecar-injector:会修改应用程序的描述信息,注入sidecar描述信息:创建pod的yaml文件三、流量拦截根据iptables路由规......
  • C语言学习记录---函数4
    汉诺塔问题(递归)#include<stdio.h>//定义汉诺塔函数voidhanoi(intn,charA,charB,charC){if(n==1){printf("将盘子从%c移动到%c\n",A,C);}else{//将n-1个盘子从A移动到Bhanoi(n-1,A,C,B);//将第n个盘子从......
  • 学习笔记3(第十章)
    一、知识点归纳1、本章的主要学习重点在本章节中,我们将深入探讨sh脚本的各个方面。首先,我们会了解sh脚本是什么,以及它与C语言在结构和功能上的主要区别。接下来,我们会详细学习如何编写sh脚本,其中包括变量的定义和使用、不同类型的语句结构、命令的执行、常规的系统命令以及命令......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》第三周学习笔记
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 《信息安全系统设计与实现》第三周学习笔记
      一门程序设计语言有哪些必备的要素和技能:语法:掌握该语言的基本语法和规则,包括变量、数据类型、运算符、控制结构等。数据结构:了解该语言中常用的数据结构,如数组、链表、栈、队列、树、图等,以及它们的实现方法和性能分析。算法:了解常见的算法和设计模式,包括排序、搜索、......
  • 信息安全系统设计与实现学习笔记3
    信息安全系统设计与实现学习笔记3一、知识点归纳以及自己最有收获的内容知识点归纳程序设计语言的要素和技能包括语法、语义和语用。这在shell脚本中体现在各类命令中。语言基本成分包括数据成分、运算成分和控制成分。第10章sh编程sh脚本是包含sh语句的文本文件,由sh解释......
  • Nginx第四天学习笔记
    Nginx第四天学习笔记在经过了前几天的学习后,我们对Nginx已经有了一个基本的了解。今天我们将更深入地探讨Nginx的配置和优化。一、配置Nginx的配置文件位于/etc/nginx/nginx.conf。这个文件包含了Nginx服务器的主要配置信息,包括端口、域名、SSL证书等。以下是一个简单的配置示例:per......
  • 学习笔记(3)
    一、任务详情自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?二、知识点归纳10.1sh脚本sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。sh脚本通......
  • 深度学习入门——卷积神经网络CNN基本原理+实战
    beginning今天给小伙伴们介绍一个高级的分类方法——卷积神经网络CNN,并学习用CNN实现图像的分类。作为深度学习的基础,CNN可太重要了呐,在图像分类、目标检测、目标跟踪、语义分割、实例分割等领域随处可见它的身影。废话不多说啦,如果你也对CNN感兴趣的话,赶紧跟我一起愉快的看下去叭......
  • 第三周Linux教材第十章学习笔记——sh编程
    第十章——sh编程sh脚本1.sh脚本是一种为shell编写的脚本程序。这个程序用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能。第一行必须为#!/bin/sh2.命令行使用chmod+x <filename>编译后才能用./filename来运行。3.......