linux详细入门教程(五)------linux Shell编程(1)

本文详细介绍了Shell编程的基础知识,包括命令运行方式、命令类别(内部命令、函数、外部命令)、执行顺序、注释与退出状态、逻辑操作、复合命令、变量管理、命令替换、模式匹配和特殊变量。此外,还涵盖了位置参数、数组变量及高级引用操作和模式匹配技巧。
摘要由CSDN通过智能技术生成

1基础知识

	**1、第一个shell命令:**

在这里插入图片描述

	**2、如何运行shell程序**
		3种方式
				1、赋予程序文件可执行权限 
				2、调用命令解释器
				3、使用source命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、shell命令种类

	1、内部命令
		Shell解释器本身包含的命令,在文件系统中没有相应的可执行文件,不能用“sudo”。
		如:cd, echo, source等。
		在执行内部命令时,不需要创建新进程。
		source命令也称为“点命令”,可以用点符号(“.”)代替。

在这里插入图片描述

		2、Shell函数
			以Shell语言书写的一系列程序代码,可以像其他命令一样被	引用。																																																																				
		3、外部命令
			独立于Shell的可执行程序,在文件系统中有相应的可执行文件。
			如:ls, find, locate, grep, ifconfig等。
			命令行会创建一个当前Shell的复制进程来执行它,执行过程存在进程的创建和消毁。
			子进程改变的环境变量只影响本进程,而不会影响父进程 ($PWD) 。

在这里插入图片描述
4、shell执行命令的顺序

		顺序
			别名
			关键字
			函数
			内部命令
			外部命令
			在同名时,别名的优先级最高而外部命令的优先级最低。
			内部命令 “type”。

在这里插入图片描述
5、注释、退出状态和逻辑操作

	1、注释
	以“#”开头的文本表示注释,Shell解释器将忽略“#”之后的所有内容。
	如果要将“#”作为普通字符对待,需在其之前加“\”进行转义,或使用引				
	号对其进行引用。

在这里插入图片描述
2、退出状态

	每一条Shell命令在退出时都会返回一个整数值给命令行Shell。
	“退出状态”用于指示命令的运行情况:成功还是失败,如果失败了是什么原因导致的失败。
	一般约定以0表示成功,非零值表示失败。
	使用特殊变量“$?”可以查看上一条命令的退出状态值。

在这里插入图片描述
3、逻辑操作

	一般情况下,脚本程序中的各条命令是从上到下顺序执行的,不论上		
	一条命令执行是否成功(退出状态为0),下一条命令都能得到执行。
	各条命令可以分行书写;也可以在一行中书写,但各命令之间要以“;”分		
	隔开来,执行时按从左到右的顺序依次执行。

在这里插入图片描述

		除了使用“;”连接命令之外,还可以使用逻辑与(“&&”)运算符和逻	
		辑或运算符(“||”)连接两条命令。 “!” 亦可用
		“&&”和“||”均具有短路特性。

在这里插入图片描述
6、复合命令

	用“{}”或“()”将多条命令括起来,使其在语法上成为一条命令。
	复合命令中的各个命令之间必须用分号或换行符分隔开来。如果使用“{}”	
	的话,还应注意:“{”后应有至少一个空格,“}”前应有一个分号或换行符。
	用“{}”括起的命令在本Shell内执行,用“()”括起的命令在一个子Shell内执	
	行。

在这里插入图片描述
7、变量的赋值与引用

	变量用于存储数据。 
	由字母、数字或下划线组成,并且只能以字母或下划线开头,大小写的意义是不同的。
	弱类型的语言,变量存储的一切值都是字符串。但是必要的时候,只要是由数值构成的字符串,也可对其执行数值操作。
	变量赋值的方式:		变量名=变量值
	“=”两边不能有任何空格;当变量值中包含空格时,应为其加上引号。
	引用变量:			$变量名

在这里插入图片描述

	Shell变量不需要预先定义,而且可以引用未赋过值的变量。
	在字符串中可以引用变量,使其值成为本字符串的一部分。 

在这里插入图片描述

	在变量名后面紧跟一个由非空白字符开始的字符串时,应该用花括号“{}”将变量名括起来.

在这里插入图片描述

		清除变量的值:unset 

在这里插入图片描述

	得到变量的长度: ${#变量名}

在这里插入图片描述
8、命令替换

	将一个或多个命令的执行结果赋值给变量
	两种方式
		反引号
		$(…)

在这里插入图片描述
9、变量属性声明

		使用内部命令declare或typeset 限定变量的属性。
				常用选项
						-r 	只读
						-i	整数
						-a	数组
						-f	函数
						-x	导出变量

在这里插入图片描述
在这里插入图片描述
10、数组变量

	bash支持一维数组变量。
	无须事先声明,数组的元素个数没有限制。
	形式类似 C语言:
			赋值		数组名[下标]=值
			引用		${数组名[下标]}
			数组元素的下标由0开始编号。

在这里插入图片描述

	组合赋值:数组名=(值1 值2  ... 值n),各个值之间应以空格分开

在这里插入图片描述

	引用没有带下标的数组名相当于引用下标为0的数组元素。

在这里插入图片描述

	引用数组中的所有非空元素。
		${array_name[*]}
		${array_name[@]}

在这里插入图片描述

	获取数组中的所有非空元素的个数
			${#array_name[*]}
			${#array_name[@]}

在这里插入图片描述

		取消数组定义

在这里插入图片描述
11、变量引用操作符

			在引用变量时进行额外的判断或替换操作。
				1、字符串替换
					${varname:-word}
						如果varname存在且非空串,则返回varname的值,否则返回word。
						作用:	如果变量未定义,则取默认值。

在这里插入图片描述

				${varname:=word}
					如果varname存在且非空串,则返回varname的值,否则将varname的值设为word,并返回word。
					作用:	如果变量未定义,则取默认值。

在这里插入图片描述

			${varname:+word}
				如果varname存在且非空串,则返回word的值,否则返回空串。
				作用:	测试变量是否存在。

在这里插入图片描述

				${varname:?message}
					如果varname存在且非空串,则返回varname的值,否则输出message,并退出当前脚本程序。
					作用:	捕捉变量未定义导致的错误。

在这里插入图片描述

					四种字符串替换格式中,每个冒号都是可选的。如果省略冒号,则判断“varname是否存在”,而不论是否非空。

在这里插入图片描述
2、模式匹配替换

	模式是指含有通配符的字符串 (*, ?, [])。
	${varname#pattern}
		如果pattern匹配varname的头部,则删除最短匹配部分,并返回剩余部分,varname本身不变。

在这里插入图片描述

		${varname##pattern}
			如果pattern匹配varname的头部,则删除最长匹配部分,并返回剩余部分,varname本身不变。

在这里插入图片描述

		${varname%pattern}
			如果pattern匹配varname的尾部,则删除最短匹配部分,并返回剩余部分,varname本身不变。

在这里插入图片描述

		${varname%%pattern}
				如果pattern匹配varname的尾部,则删除最长匹配部分,并返回剩余部分,varname本身不变。

在这里插入图片描述

	${variable/pattern/string} 
	${variable//pattern/string}
			将varname的最长匹配部分替换为string,并返回替换后的串,varname本身	不变。
			第一种格式仅替换第一次匹配的子串,第二种格式会替换

在这里插入图片描述
12、位置参数和特殊变量

1、位置参数

	也称位置变量。
	运行Shell脚本程序时,命令行Shell传递给脚本的参数,以及在Shell脚本程序中调用函数时传递给函数的参数。
	位置变量的名称是以0,1,2,...这些整数命名的,相应地以$0, $1, $2, …等进行引用。
	0对应命令名(脚本名),1对应第一个实参,2对应第二个实参,... 。

在这里插入图片描述
2、特殊变量
在这里插入图片描述

	“$*” 和 “$@”的区别
	只在加了双引号后$*和$@才有区别。
	”$@”表示的是引用所有参数, 相当于 “$1” “$2”... “$N”,即 N个以空格分隔的字符串。
	“$*”表示引用所有参数连接在一起(中间以空格分隔)的字符串。
	如果用于数组,”${数组名[@]}”表示引用数组整体的各个元素,”${数组名			[*]}”表示引用所有数组元素连接在一起(中间以空格分隔)的字符串。

3、用法

在这里插入图片描述
在这里插入图片描述

4、设置位置参数

		使用内部命令 “set”

在这里插入图片描述
在这里插入图片描述
5、移动位置参数

		使用内部命令 “shift”.原来的$2的值赋给$1(原$1的值永远丢失),原来的$3的值赋给$2,…。会使参数个数少一,即$#的值会减一。

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重生之我是泰勒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值