首页 > 系统相关 >第三周Linux教材第十章学习笔记——sh编程

第三周Linux教材第十章学习笔记——sh编程

时间:2023-09-24 18:15:17浏览次数:52  
标签:脚本 语句 变量 编程 命令 sh Linux 字符串

第十章——sh编程

sh脚本

1.sh脚本是一种为shell编写的脚本程序。这个程序用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能。

第一行必须为 #!/bin/sh

2.命令行使用chmod +x  <filename>编译后才能用./filename来运行。

3.注释:以#开头的句子表示注释,直到这一行的结束。

sh脚本与C程序

1. sh 是一个解释程序,逐行读取 sh 脚本文件并直接执行这些行。如果行是可执行命令且为内置命令,那么 sh 可直接执行。否则,它会复刻一个子进程来执行命令,并等待子进程终止后再继续,这与它执行单个命令行完全一样。相反, C 程序必须先编译链接到一个二进制可执行文件,然后通过主 sh 的子进程运行二进制可执行文件。

2.在 C 程序中,每个变量必须有一个类型,例如 char 、 int 、 float 、派生类型(如 struct )等。相反,在 sh 脚本中,每个变量都是字符串。因此不需要类型,因为只有一种类型,即字符串。

3.每个 c 程序必须有一个 main() 函数,每个函数必须定义一个返回值类型和参数(如有)。相反, sh 脚本不需要 main 函数。在 sh 脚本中,第一个可执行语句是程序的入口点。

4.平均每行脚本语言代码执行成百上千条机器指令,高级语言则大约为五条。其中的原因之一是脚本语言使用了解释器,更大的原因是脚本语言的操作更加强大。脚本语言的代码量和编程时间都少于高级语言。

命令行参数

Shell编程中的命令行参数(位置参数)与C程序中的main函数传参类似。这些位置参数用$N表示,N为正整数,表示命令行传入的第N个参数。N从0开始进行标记,与C语言中的数组表示的方式相同。例如,$1表示传递给脚本程序的第一个参数,并依此类推。$0表示程序本身的名字。

读取参数

 读取脚本名称

 读取参数个数

 读取参数列表的最后一个参数

 遍历参数列表

 检测参数

 移动参数

 sh变量

在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。

变量定义和赋值

在Shell脚本中,可以使用等号(=)来定义和赋值变量,例如:variable_name=value。变量名通常是字母、数字和下划线的组合,但不能以数字开头。

要赋值给一个变量,可以这样写:

变量类型

在Shell中,变量可以是全局变量或局部变量。全局变量在整个脚本中都可见,而局部变量只在定义它的函数或代码块中可见。

变量的引用

使用$符号来引用变量的值,例如:echo $variable_name。这将输出变量的值。

有时候变量名很容易与其他文字混淆,

如果num不加{ },系统编译时就会将$之后的内容认为是变量名,这样的变量根本不存在,所以无法打印:

 添加{ }后系统可编译出存在的变量num:

特殊变量

Shell中有一些特殊变量,如$0表示脚本名称,$1$2等表示脚本的参数,$#表示参数的数量,$?表示上一个命令的退出状态等。

环境变量

环境变量是一种全局变量,用于存储操作系统和Shell的配置信息。一些常见的环境变量包括PATH(指定可执行文件的搜索路径)、HOME(指定当前用户的主目录)、USER(表示当前用户名)等。

变量的操作和修改

可以使用各种命令和操作符来修改和操作变量的值,如let命令、expr命令、+=操作符等。

删除变量

使用unset命令可以删除一个变量,例如:unset variable_name

以上程序执行后无输出:

变量的作用域

 变量的作用域决定了变量在何处可见。全局变量在整个脚本中可见,而局部变量只在定义它的函数或代码块中可见。

sh中的引号

sh 有许多特殊字符,如$、/、*、>、<等。要想把它们用作普通字符,可使用\或单引号来引用它们。例如:
A = xyz
echo  \$A          ==>$A      #原封不动地回报$
echo  '$A'         ==>$A      #在单引号中不进行替换
echo "see $A"  ==> see xyz     #在双引号中替换$A
通常,\用于引用单个字符。单引号用于引用长字符串。单引号内没有替换。双引号用于保留双引号字符串中的空格,但在双引号内会发生替换。

 

 sh命令

内置命令

shell有很多内置在其源代码中的命令。这些命令是内置的,所以shell不必到磁盘上搜索它们,执行速度因此加快。

内置sh命令表可查看此网址:https://blog.csdn.net/imxiangzi/article/details/50373541

Linux命令

1.echo命令

echo 只是将参数字符串作为行回显到stdout。它通常将相邻的多个空格压缩为一个空格,除非有引号。

2.expr命令

 运行结果报错:

 将乘法一行删除后可运行,向ChatGpt请教后发现乘号*前要加转移符 \  :

 程序修改后运行成功:

 

总结:expr除了可用于数学运算外,还可以用于字符串操作、逻辑运算、比较大小等。在使用 expr 进行数学运算和逻辑运算时,需要使用反斜杠(\)转义特殊字符,如 & 和 |。字符串操作中,要注意将字符串用双引号括起来,以处理包含空格或特殊字符的字符串。

另外,虽然 expr 在Shell脚本中是一个有用的工具,但它有一些限制,例如不支持浮点数运算,而且在复杂的数学和字符串操作中可能不够灵活。在现代Shell脚本编程中,通常使用更强大的数学和字符串操作工具,如 $((...)) 或 ((...)) 进行数学运算,以及 ${variable##pattern} 和 ${variable%%pattern} 进行字符串操作。这些工具更加直观且功能更强大。

 
3.管道命令

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

书中介绍不详细,向ChatGpt请教:

 

 总结:将 | 前函数的输出作为 | 后函数的输入。

 

4.实用命令

 除了上面的 Linux 命令之外, sh 还使用许多其他实用程序作为命令。其中包括:

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

命令替换

在 sh 中,$ A 会被替换成 A 值。同样,当 sh 遇到' cmd '(用引号括起来)或 S ( cmd )时,它会先执行 cmd ,然后用执行的结果字符串替换$( cmd )。

sh控制语句

sh是一种编程语言,支持许多执行控制语句,类似于C语言中的语句。

if-else-fi语句

  • 在条件判断中,变量通常需要用双引号括起来,以处理可能包含空格或特殊字符的情况。
  • fi 表示结束 if 块,它是 if 的倒写,用于标识条件判断的结束。
#①条件判断
if [condition] then #条件为真时执行的语句; else #条件为假时执行的语句; fi
#②多重条件
if [condition1]
then
#条件1为真时执行的语句;
elif [condition2]
#条件2为真时执行的语句;
else
#所有条件都不满足时执行的语句;
fi
#③条件表达式
#条件通常使用方括号 [ ] 来包含条件表达式。条件表达式可以包括比较操作符(如 -eq-ne-lt-gt 等)和逻辑操作符(如 &&||)。
if [ "num1" -ne "num2" ]; #注意:比较字符串用==或!=
then echo "num1 不等于 num2"
if [ "num1" -eq "num2" ];
then echo "num1 等于 num2"
if [ "num1" -gt "num2" ];
then echo "num1 大于 num2"
if [ "num1" -lt "num2" ];
then echo "num1 小于 num2"

for语句

for var in item1 item2  ... itemN
   do
       commands
done

写成一行:for var in item1 item2 ... itemN; do command1; command2… done;

while语句

while condition
do
     command
done

until-do语句

until [condition]
do
    #循环体
done

case语句

case 值  in
模式1)
         command1
         command2
          ...
         commandN
         ;;
模式2)
         command1
         command2
          ...
         commandN
         ;;
esac

 sh函数

--------方法①--------
function  函数名
{
           #函数代码
}
--------方法②--------
函数名()
{
           #函数代码
}

sh脚本中的相关命令字符:

 向ChatGpt请求苏格拉底式提问

学习总结

学习本章内容时较为轻松,相较于C语言编程,shell 编程更为简洁易懂。

 

标签:脚本,语句,变量,编程,命令,sh,Linux,字符串
From: https://www.cnblogs.com/20211115fyq/p/17725830.html

相关文章

  • 大学新人小白,学习编程第一步‘’坚持‘’
    当下的各种编程语言盛行,鱼龙混杂,有C++,Python,java。虽然大多数人在初高中时有了解过小猫cat,Python学习等,之所以大学选择C语言或许应该离不开它是”千万家之本“。对于一位未来正打算从事相关行业的小白来说,学之根本尤为重要。学习第一步,”坚持“一堂课的开始一般是枯燥的,因为你并未......
  • Linux是什么?它与Windows有什么区别?
    前言本文将讲解Linux是什么、它的应用领域、未来、优缺点以及它与Windows的区别。一、Linux是什么?Linux是一种自由的、开放源码的类Unix操作系统。目前存在着许多不同的Linux系统,但它们都使用了Linux内核。Linux可安装在各种计算机设备中,从手机、平板电脑、路由器和视频游戏控制台,......
  • 一文读懂Shell进程操作:编程新手必看
    什么是程序,什么又是进程程序是指令的集合,而进程则是程序执行的基本单元。为了让程序完成它的工作,必须让程序运行起来成为进程,进而利用处理器资源、内存资源,进行各种 I/O 操作,从而完成某项特定工作。从这个意思上说,程序是静态的,而进程则是动态的。进程有区别于程序的地方还有:进程......
  • linux 中 conda配置文件 .condarc
     001、.condarc存在于个人用户的家目录下,在初次安装完conda并不会生成,在运行完condaconfig后才会生成(base)[root@pc1~]#cd~##回到用户个人家目录(base)[root@pc1~]#ls##列出文件anaconda3DesktopDownloads......
  • 修改liunx ssh 超时时间
    方法一写入文件vi/etc/ssh/sshd_config修改LoginGraceTime为0//连接超时时间为不超时servicesshdrestart  方法二临时设置 echo$TMOUT TMOUT=0或者......
  • Linux操作系统学习
    当今互联网时代,Linux操作系统凭借其高度的自由度、可靠性和安全性,已经成为网络世界的重要组成部分。作为最受欢迎的Linux发行版之一,CentOS在企业和个人用户中广受好评。本篇博客将向大家介绍本人在CentOS操作系统所学到的一些基础知识和常用命令。CentOS是CommunityEnterpriseO......
  • linux yum 无法安装程序
    因为系统需要更新首先,进入到yum的repos目录cd/etc/yum.repos.d/ ......
  • Uinx\Linux系统编程第十章
    第十章sh编程10.1sh脚本sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。10.2sh脚本与C程序这两者之间有一些相似之处,但在根本上是不同的。sh是一个解释程序,逐行读取脚本文件并直接执行这些行。如果行是可执行命令且为内置命令,那么sh可直接执行。否则,他会复......
  • windows 与linux 文件互传
      使用windows自带的powershell 其中自带了scp命令。这个命令可以实现与linux服务器的文件互传功能。他的语法是在windows的命令提示符下(注意不要远程到linux)从第一个参数的目录复制文件到第二个参数命令和参数中间有操作符。例如从windows向linux复制文件命令为scpd:......
  • crash —— 获取slub的详细信息
    在linux系统中可以通过/proc/slabinfo获取slab的统计数据,crash提供了kmem来实现这个功能。查看系统每个kmem_cache的概要信息crash>kmem-sCACHEOBJSIZEALLOCATEDTOTALSLABSSSIZENAMEffff888141e12000131072000128......