问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Shell脚本基础语法入门教程

创作时间:
作者:
@小白创作中心

Shell脚本基础语法入门教程

引用
CSDN
1.
https://m.blog.csdn.net/GB100200/article/details/145707905

本文将带你系统地学习Shell脚本的基础语法,从Shell的作用、脚本构成、执行方式,到重定向与管道符的使用,再到各种变量类型及其运算方法。通过本文的学习,你将掌握Shell脚本的基本知识,为更深入的学习打下坚实的基础。

一、Shell脚本基础

1. Shell的作用

Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

常见的Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的Shell脚本种类。

# 查看本机shell
[root@LocalHost ~]# cat /etc/shells

Linux中脚本的用途:

  1. 将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
  2. 减少手工命令的重复输入,一定程度上避免人为错误
  3. 将软件或应用的安装及配置实现标准化
  4. 用于实现日常性的、重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

2. Shell脚本的构成

  1. 脚本声明(解释器):#!/bin/bash表示此行以下的代码语句是通过/bin/bash程序来解释执行。
  2. 注释信息:以#开头的语句表示为注释信息
  3. 可执行语句:比如echo命令用于输出“”之间的字符串

3. 脚本执行的方式

3.1 指定的Shell解释器(不需要脚本有执行权限)

[root@localhost opt]# bash test.sh  # 直接用bash解释器去执行

3.2 路径的方式

[root@localhost opt]# ll test.sh
-rw-r--r-- 1 root root 129 11月 20 15:12 test.sh
[root@localhost opt]# chmod 777 test.sh  # 加上执行权限
[root@localhost opt]# ll test.sh
-rwxrwxrwx 1 root root 129 11月 20 15:12 test.sh
[root@localhost opt]# /opt/test.sh  # 绝对路径执行
[root@localhost opt]# ./test.sh     # 相对路径执行

[root@localhost opt]# ln -s /opt/test.sh /usr/sbin/test.sh  # 做软连接到$PATH中
[root@localhost opt]# test.sh   # 直接作为可执行的外部命令执行

3.3 使用source和“.”执行脚本(不常用)

4. 脚本的错误

4.1 书写错误

bash -n执行检测,不会影响后续命令执行

4.2 语法错误

bash -x执行检测,会影响后续命令执行

4.3 逻辑错误

在脚本中建议加上set -e(遇到错误的命令即终止,不再往下执行)
在脚本中建议加上set -u(遇到变量赋值不正确,即终止)

二、重定向与管道符

1. 重定向

改变电脑的数据输出方向,默认是输在屏幕上

2. 重定向输入输出

3. 管道符

连接命令:管道符允许你将多个命令链接在一起,从而把一个命令的输出作为另一个命令的输入,而不需要中间存储结果。例如:

cat file.txt | grep "keyword"

提高效率:使用管道符可以避免在磁盘上临时保存数据。例如,处理大型数据时,可以直接将结果通过管道传递给下一个命令,而不需要将中间结果写入磁盘,减少了磁盘I/O操作,提高了处理效率。

简化命令:通过管道符,用户能够使用多个简单的命令组合来完成复杂的任务,而不需要编写复杂的脚本。例如:

ps aux | sort -rk 3,3

三、Shell脚本变量

1. 变量的作用

用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化

[root@localhost opt]# echo $PATH    # PATH为系统预设的变量名
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin   # 变量值

2. 变量类型

2.1 自定义变量

定义变量:不需要指定类型,直接赋值即可
访问变量:需要在变量名前加上$
命名规则:

  • 变量名只能包含字母、数字和下划线(_),但不能以数字开头。
  • 变量名大小写敏感,myVariable 和 MYVARIABLE 是不同的。
  • 读取用户输入:用read命令读取用户输入并存储在变量中

2.2 环境变量

环境变量由系统提前创建,用于设置用户的工作环境,可以使用env命令来查看环境变量,常用的环境变量有:

  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
  • $PATH 表示可执行用户程序的默认路径

子进程可以继承并使用父进程的变量,但父进程无法使用子进程的变量
同样,孙子进程也可以继承并使用子进程的变量,反之亦不可

2.3 只读变量

定义好的变量值不允许更改,最快的方式就是重启。

2.4 位置变量

$1-$n表示参数的位置

2.5 预定义变量

  • $?:返回上一次的执行结果,返回0为正确,返回其他值则是错误
  • $$:输出当前bash的pid号
  • $0:表示脚本的名称
  • $#:表示位置参数的总个数
  • $@:返回所有的参数,将参数逐个返回
  • $*:返回所有的参数,将参数当作一个整体一起返回
  • $!:返回上一次执行的进程pid号

3. 特殊符号

3.1 花括号

定义变量的范围

3.2 单引号(' ')

表示强引用,表示调用单引号的内容本身

3.3 双引号(" ")

表示弱调用,表示调用变量的值

3.4 反撇号( )

表示调用命令的结果,等同于$(),可以调用命令执行的结果给变量赋值。

4. 整数运算和浮点数运算

整数运算使用的工具是let、expr、(())、[ ] 、( ),通常运算符有+ - * /。

Shell 默认不支持浮点数运算,因此需要借助外部工具如 bc(Basic Calculator)来进行浮点数计算。

4.1 let

变量值1=变量值2运算符变量值三(没有空格),例如:

同时,let运算支持自加和自减:

  • let a++ 相当于 a=$[a+1]
  • let a-- 相当于 a=$[a-1]
  • let a+=2 相当于 a=$[a+2]

4.2 expr

变量1=expr 变量2 运算符 变量3(注意空格)
使用 调用expr的运算结果,赋值给变量

4.3 expr

变量1=$(expr 变量2 运算符 变量3)(注意空格)
使用$()调用expr的运算结果,赋值给变量

4.4

变量1=$((变量2运算符变量3))
使用$()调用()的运算结果,赋值给变量

4.5

变量1=$[变量2运算符变量3]
使用[ ]调用变量的运算结果,赋值给新变量

4.6 浮点数运算

bc 是一个任意精度的计算器,可以用来处理浮点数计算,你需要指定浮点数的精度(使用 scale 变量)。例如:

#!/bin/bash
a=5
b=3
# 加法
result=$(echo "scale=2; $a + $b" | bc)
echo $result # 输出 8.00
# 减法
result=$(echo "scale=2; $a - $b" | bc)
echo $result # 输出 2.00
# 乘法
result=$(echo "scale=2; $a * $b" | bc)
echo $result # 输出 15.00
# 除法
result=$(echo "scale=2; $a / $b" | bc)
echo $result # 输出 1.66
# 取余(bc也支持模运算)
result=$(echo "$a % $b" | bc)
echo $result # 输出 2

在 bc 中,scale 变量指定了结果的小数点后保留的位数。需要注意的是,scale 只影响计算结果的精度,而不是操作数的精度。

4.7 随机数

想要随机产生一个数我们需要用到取余%和RANDOM
几个例子,我们想取一个5以内的随机数:

[root@localhost opt]# echo $[RANDOM%5]
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号