Linux基础部分的学习(4)- shell语法学习1

本文介绍了Bash脚本的基础知识,包括shell的概念及其在Linux系统中的应用,详细讲解了Bash脚本的编写方法、注释使用、变量定义与操作、数组处理等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



前言

读书是易事,思索是难事,但两者缺一,便全无用处。——富兰克林


一、shell是什么?有什么用?

shell是我们通过命令行与操作系统沟通的语言。

shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。

Linux中常见的shell脚本有很多种,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
zsh
…
Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。
文件开头需要写#! /bin/bash,指明bash为脚本解释器。

脚本示例

#! /bin/bash
echo "Hello World!"

运行方式:(作为可执行文件运行)

acs@9e0ebfcd82d7:~$ chmod +x test.sh  # 使脚本具有可执行权限
acs@9e0ebfcd82d7:~$ ./test.sh  # 当前路径下执行
Hello World!  # 脚本输出
acs@9e0ebfcd82d7:~$ /home/acs/test.sh  # 绝对路径下执行
Hello World!  # 脚本输出
acs@9e0ebfcd82d7:~$ ~/test.sh  # 家目录路径下执行
Hello World!  # 脚本输出

二、语法—注释

单行注释

每行中#之后的内容均是注释。
# 这是一行注释
echo 'Hello World'  #  这也是注释

多行注释

:<<EOF
第一行注释
第二行注释
第三行注释
等等注释!!!
EOF
其中EOF可以换成其它任意字符串。例如:
:<<abc
第一行注释
第二行注释
第三行注释
abc

三、语法—变量

1.定义一个变量(=号两边不能有空格,否则可能会报错!!!)

:

2.使用一个变量

使用变量,需要加上$符号,或者${}符号。花括号是可选的,
主要为了帮助解释器识别变量边界。

在这里插入图片描述

在这里插入图片描述

3.只读变量(使用readonly或者declare可以将变量变为只读。)

name=abc
readonly name
declare -r name  # 两种写法均可

name=abc  # 会报错,因为此时name只读

在这里插入图片描述

4.删除变量(unset 可以删除变量)

name=abc
unset name
echo $name  # 输出空行

在这里插入图片描述

5.变量类型

a.自定义变量(局部变量)
子进程不能访问的变量
b.环境变量(全局变量)
子进程可以访问的变量

自定义变量改成环境变量:
acs@9e0ebfcd82d7:~$ name=abc  # 定义变量
acs@9e0ebfcd82d7:~$ export name  # 第一种方法
acs@9e0ebfcd82d7:~$ declare -x name  # 第二种方法
将环境变量定义为自定义变量
acs@9e0ebfcd82d7:~$ export name=abc  # 定义环境变量
acs@9e0ebfcd82d7:~$ declare +x name  # 改为自定义变量

6.字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号与双引号的区别:

a.单引号中的内容会原样输出,不会执行、不会取变量;
b.双引号中的内容可以执行、可以取变量;

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

获取字符串长度

在这里插入图片描述

在这里插入图片描述

获取子串

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

四、语法—默认变量

文件参数变量
在执行shell脚本时,可以向脚本传递参数。
$1是第一个参数,$2是第二个参数,以此类推。
特殊的,$0是文件名(包含路径)。例如:

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

在这里插入图片描述

五、数组

a.定义数组(两种方法)

方法一:

在这里插入图片描述

方法二

在这里插入图片描述

b.获取定义数组的数值
--获取指定数组的数值

在这里插入图片描述

获取全部数组的数值(两种写法)
echo ${arry[@]}  			#写法一

echo ${arry[*]}				#写法二

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

c获取数组长度(两种写法)
${#arry[@]}  # 第一种写法
${#arry[*]}  # 第二种写法

在这里插入图片描述

在这里插入图片描述

六、expr命令

expr命令用于求表达式的值,格式为:		
expr 表达式
表达式说明:
	用空格隔开每一项
	用反斜杠放在shell特定的字符前面(发现表达式运行错误时,可以试试转义)
	对包含空格和其他特殊字符的字符串要用引号括起来
	expr会在stdout中输出结果。如果为逻辑关系表达式,则结果为真,stdout为1,否则为0。
	expr的exit code:如果为逻辑关系表达式,则结果为真,exit code为0,否则为1。

a.字符串表达式
	length STRING
		返回STRING的长度
	index STRING CHARSET
		CHARSET中任意单个字符在STRING中最前面的字符位置,下标从1开始。
		如果在STRING中完全不存在CHARSET	中的字符,则返回0。
	substr STRING POSITION LENGTH
		返回STRING字符串中从POSITION开始,长度最大为LENGTH的子串。
		如果POSITION或LENGTH为负数,0或非数值,则返回空字符串。

在这里插入图片描述

在这里插入图片描述

b.整数表达式
	expr支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。

	+ -
	加减运算。两端参数会转换为整数,如果转换失败则报错。

	* / %
	乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。

	() 可以改变优先级,但需要用反斜杠转义

示例:
在这里插入图片描述

在这里插入图片描述

c.逻辑关系表达式
|
如果第一个参数非空且非0,则返回第一个参数的值,否则返回第二个参数的值,
但要求第二个参数的值也是非空或非0,否则返回0。如果第一个参数是非空或非0时,不会计算第二个参数。

&
如果两个参数都非空且非0,则返回第一个参数,否则返回0。如果第一个参为0或为空,则不会计算第二个参数。

< <= = == != >= >
比较两端的参数,如果为true,则返回1,否则返回0。”==”是”=”的同义词。
”expr”首先尝试将两端参数转换为整数,并做算术比较,如果转换失败,则按字符集排序规则做字符比较。

() 可以改变优先级,但需要用反斜杠转义

实例:
在这里插入图片描述
在这里插入图片描述

七.read命令

read命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code为1,否则为0。

参数说明

-p: 后面可以接提示信息
-t:后面跟秒数,定义输入字符的等待时间,超过等待时间后会自动忽略此命令

在这里插入图片描述

在这里插入图片描述

八. echo命令

1.显示普通字符串
echo "Hello AC Terminal"
echo Hello AC Terminal  # 引号可以省略

在这里插入图片描述

在这里插入图片描述

2.显示转义字符

echo "\"Hello AC Terminal\""  # 注意只能使用双引号,如果使用单引号,则不转义(转义双引号)
echo \"Hello AC Terminal\"  # 也可以省略双引号

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

3.显示变量

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

4.显示换行
echo -e "Hi\n"  # -e 开启转义
echo "hello"

在这里插入图片描述

5.显示不换行
echo -e "Hi  \c"
echo "hello"

在这里插入图片描述

6.显示结果定向至文件

echo "Hello " > 文件名

在这里插入图片描述

7.原样输出字符串,不进行转义或取变量(用单引号)
echo '\"$a\"'

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

8.显示命令的执行结果
echo `date`

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值