一起来学Shell脚本编程(二)

简介: 一起来学Shell脚本编程(二)

前言

目前正在出一个Shell脚本编程系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

前面我们学习了Linux的一些基本命令,需要我们在终端手动去执行,但在处理一些复杂的操作就显得有点乏力,需要不停的执行,还很容易出错。有没有一种办法,可以帮助我们执行这一些列操作,方法当然有,那就是通过脚本去解决。

作为服务端开发,shell脚本编程还是要掌握一下的,可以做做基础性的运维,提高工作效率。

本系列主要以Linux Bash为主 ,好了, 废话不多说直接开整吧~

read

命令行从输入设备读入内容

#!/bin/bash
echo "1+1=?"
read NUM #输入
echo "1+1=$NUM"

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./read.sh
1+1=?
2
1+1=2
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

变量

支持自定义变量,定义变量时,变量名不用加符号$

variableName="variableName"

tip: 注意,变量名和等号之间不能有空格,我们习惯性会加个空格,所以要注意一下

命名规则:

  • 首个字符必须为字母(a-z,A-Z)
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

使用一个定义过的变量,只要在变量名前面加符号($)即可,如:

str="hello world"
echo $str
echo ${str}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

str="world"
echo "hello ${str}"

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
hello world
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

变量可以重新赋值:

str="hello world"
echo $str
str="hello world1"
echo ${str}

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
hello world
hello world1
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

readonly

在变量前面加readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

str="hello world"
echo $str
readonly str
str="hello world1"
echo ${str}

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
./var.sh: line 6: str: readonly variable
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

可以看到再次赋值的时候就报错了

unset

使用 unset 命令可以删除变量。语法:

str="hello world"
echo $str
readonly str
unset str
str="hello world1"
echo ${str}

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
./var.sh: line 5: unset: str: cannot unset: readonly variable
./var.sh: line 7: str: readonly variable
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

这里大家要注意了 unset 不能删除只读变量

str="hello world"
echo $str
unset str
echo ${str}

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

变量类型

  • 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  • 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  • shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

  • 特殊变量

变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

示例:

#!/bin/bash
echo "shell name: $0"
echo "第一个参数 : $1"
echo "第二个参数 : $2"
echo "所有参数: $@"
echo "所有参数: $*"
echo "所有参数的个数 : $#"

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh a b c d e 
File shell name: ./var.sh
First 第一个参数 : a
Second 第二个参数 : b
Quoted 所有参数: a b c d e
Quoted 所有参数: a b c d e
Total 所有参数的个数 : 5
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

退出状态

$? 可以获取上一个命令的退出状态

echo "exit $?"

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./var.sh
exit 0
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

转义字符

转义字符  含义
\\  反斜杠
\a  警报,响铃
\b  退格(删除键)
\f  换页(FF),将当前位置移到下页开头
\n  换行
\r  回车
\t  水平制表符(tab键) 
\v  垂直制表符

默认不转义,需要加-e,上节给大家提到过,这些转义字符大家应该都比较熟知了,就不过多介绍了,在shell中也是可以使用这些字符的

结束语

大家平时在工作的时候就可以灵活运用起来了,多用用就熟悉了,大部分项目中都会用到脚本帮助我们去做一些自动化的工作,从而提高效率,还不容易出错~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

相关文章
|
2天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
10 1
|
3天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
11 1
|
4天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
4天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
23 5
|
6天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
6天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
15 3
|
12天前
|
弹性计算 运维 监控
|
12天前
|
存储 弹性计算 运维
自动化收集员工信息的Shell脚本
【4月更文挑战第30天】
10 0