Shell编程基础/变量/算式转换

日常工作中大多数的系统和监控部署以及一些简单的操作都会用Shell去处理,比起在命令行里去手敲命令更节省人工与时间.还有python也是.
Shell也是源于C语言的东西,因为linux内核就是C语言写的,shell去跟内核去交互就是和C交互,shell基本就是这样延申出来的,C在底层,shell在上层,只不过shell它在linux能帮助我们更好的管理系统.

Shell书写格式

首行:#!/usr/bin/env bash
#!加一起是shell语法的规定,是声明shebang
术语叫shebang,是解释器,在文件的开头注释说明它这个文件被我们系统中的bash去解释.同时bash它自己本身也是一个命令.

为什么不是#!/usr/bin/bash而是#!/usr/bin/env bash
和环境变量有关系,有的系统的bash不一定有/usr/bin/bash或是/bin/bash,但系统有一个共通点是一定会有env bash这个东西,env是一个环境变量,在一个环境里所存储的变量都会由env去规定,称为环境变量,那么在env里去规定的这些变量是环境变量的话那么就证明如果我们的bash能在该系统运行的话,那么就能在env里面找到bash.目的是提高脚本的复用性.

第二三四五行
#date:2020/04/13 #创建时间
#filepath:项目名称,脚本在哪个目录/本次脚本名称
#author:TNT #脚本作者
#modify:22:08 #修改时间
#usage:练手 #用途

#this print string to display #重点,要养成习惯
每次写正文之前都要写一个注释,描述这条语句指令做的工作.方便其它同事查看我们的代码.增强脚本的可读性.并且写这个注释的时候不要写命令本身的意思,要写出写这条命令的意义或者目的意思.

上面这几行的作用都是对脚本进行一个描述,选加.
在这里插入图片描述

编辑脚本流程

[root@localhost ~]# vim 01.simpleScript.sh
#.sh,脚本一般情况下都会加.sh作为后缀,特殊情况下可以不加.sh,只要你的脚本里的第一行有标明注释器,那么系统就会默认它是一个脚本,所以.sh加不加都可以.
.sh之前的名字随便起,没规定,但要见文识意,一眼看上去就知道是什么,拼音数字英文都可.

在这里插入图片描述
一般情况下脚本的正文都是linux的命令.

保存退出之后如何执行脚本:
[root@localhost ~]# bash 01.simpleScript.sh
在这里插入图片描述

[root@localhost ~]# echo “hello world”
[root@localhost ~]# printf “hello world\n”
\n是换行的意思.
echo和printf都是打印字符串的作用,但printf是没有默认的换行符,加上\n之后,作用就一样了.

在这里插入图片描述
shell的基本语法会包含if,case,for,while。
函数
if判断 #重点1
case多条件判断 #一般用于写工具
for循环 #重点2,推荐使用,最正统的循环
while循环 #满足长时间运行的死循环而用

脚本文件里执行的顺序是从上到下,从左到右这么一个特性.
所有能在linux命令行执行的命令,像ls cd touch mkdir等等,都可以应用在shell脚本里面.所学的命令只是为了给写shell脚本打基础.脚本文件就是linux命令的集合.

shell脚本调试

意思就是检查脚本有没有语法错误,如果有就让它显示出来.
有两种方案:
方法1:bash -x + 脚本.sh #
[root@localhost ~]# vim 02.scriptFormat.sh
在这里插入图片描述
如果检查到正文的一句话,前面显示的是+号,只要没看到减号或错误提示,证明这句话是没问题的.并且会在对应的语句后面把正确结果显示出来.

接着我们故意写错脚本正文.仍然显示+号,但第二行报错并且把错误地方也提示出来.
在这里插入图片描述
这个方法有个弊端就是如果你脚本正文多的话无论对错它都会全给你执行一遍,看得眼花.不乐意看.

方法2:ShellCheck + 脚本.sh #第三方软件,自行安装
[root@localhost ~]# yum -y install ShellCheck
[root@localhost ~]# shellcheck 02.scriptFormat.sh
在这里插入图片描述
在这里插入图片描述
不用加选项,直接运行.
但这个工具它在检查的时候是检查的语法错误,而不是命令错误,比如echo写错成ech这种摸棱两可的命令错误是检查不出来的.但上面的bash -x 可以.

但如果把#!/usr/bin/env bash去掉的话就属于语法错误了.
那么
[root@localhost ~]# shellcheck 02.scriptFormat.sh
在这里插入图片描述
在这里插入图片描述
也会很智能的告诉你错误在第一行#附近去增加shebang.

总结:两种方法的方向不一样,bash -x会先去给你运行,然后给你提示报错显示正确答案.shellcheck会检查脚本中肯定错误的地方会给你显示出来.摸棱两可的错误不一定能检查出来.

shell脚本的运行方式

运行方式有三种:
方法一:
bash + 脚本.sh

[root@localhost ~]# bash 02.scriptFormat.sh

方法二:
./02.scriptFormat.sh

[root@localhost ~]# ./02.scriptFormat.sh
-bash: ./02.scriptFormat.sh: Permission denied
提示没有权限

[root@localhost ~]# ll 02.scriptFormat.sh
-rw-r–r-- 1 root root 168 Apr 13 23:59 02.scriptFormat.sh
[root@localhost ~]# chmod a+x 02.scriptFormat.sh
给执行权限

[root@localhost ~]# ./02.scriptFormat.sh
hello world

方法三:
比如像ls cd在系统中任意一个地方都可以执行,那么我们能写一个任意地方都能执行的脚本吗,可以

/usr/bin/ 这个目录下面放的是我们普通用户都可以执行的所有命令.道理很简单,把这个脚本放进去/usr/bin下面就可以把这个脚本变成一个命令去使用.

[root@localhost ~]# cp 02.scriptFormat.sh /usr/bin/
[root@localhost ~]# 02.scriptFormat.sh
hello world

这个方法通常在写一些系统工具的时候去使用.这样的话就可以在系统中你想要在的目录中去运行你的自定义命令.用shell去创建一个命令出来.

小系统工具例子:
[root@localhost ~]# vim 03.systemTools.sh
在这里插入图片描述
$1 表示的是 位置变量
cp -rf $1{,.bak}
#递归强制复制备份 03.sh脚本空格后面的第一个参数叫做$1

{,.bak}语法意思
linux里面有个叫乘法分配率的东西
[root@localhost ~]# cp /etc/file{,.bak}
括号外面的叫公因数,乘以括号里面的内容,利用逗号进行分割,逗号前面{,}没有的话那就是file乘以没有,命令本身不会变,那组合起来还是file,逗号后面{,.bak}是.bak的话组合起来就是file.bak

如平常备份一个file用的方法是
[root@localhost ~]# cp /etc/file /etc/file.bak
如果用{,.bak}进行备份,就可以写成
[root@localhost ~]# cp /etc/file{,.bak}
就会自己组合成file.bak
在这里插入图片描述

shell变量的类型

普通变量可以理解为:
变量:
是一段内存地址.它是内存空间,它可以存储任意大小类型形状的值.

变量名:
是内存地址的别名.内存空间的名字叫变量名.

变量值:
内存空间里面存的数据,就是值,它就是变量值.

有一段内存,内存是一个长条,内存里面会有ABCD…个小条,内存存东西都是一段一段去存的,内存中的每一段小条都会分配一个地址,这个地址通常我们在编程中不便于利用,所以在内存中的这个地址,像ip地址,mac地址通常都不会用它,而我们通常会给他们起个别名,这个就叫做变量名的东西.变量名等同于内存中的地址.变量名它只是一个地址的别名而已.
在这里插入图片描述
变量在shell表现形式是:
var=“string”
#var #变量名
= #赋值
“string” #变量值
也就是说,我们系统里的一段内存空间(变量)叫var的这个别名(变量名)里存放的数据叫做string(变量值).
脚本里可以这样声明规定,系统就给我们存好了.

在这里插入图片描述
可以把别的文件内容读进当前文件.

shell变量声明与调用

[root@localhost ~]# vim 04.variable.sh
在这里插入图片描述
[root@localhost ~]# bash 04.variable.sh
hello world
hello

一行中括号里不能填2个变量,一个括号只能包含一个变量,一行中要调用2个变量方法如下图
在这里插入图片描述
[root@localhost ~]# bash 04.variable.sh
hello world
hello
hello
hello world

推荐使用有括号的调用方法,能避免变量与字符串之间忘写空格的错误.

shell变量数据类型

在这里插入图片描述
类型的作用是在shell里面如何进行相加相减相乘这些操作.
shell属于弱数据类型语言,也没必要非得去区分数据类型.因为shell里面不适合科学计算,不像python可以搞算法.shell除了普通的加减法之外可以说是没有算法可言,只有命令的逻辑性.

重点内容

shell变量的置换

[root@localhost ~]# vim 05.changeVarValues.sh
如果想把变量1和变量2的置换,需要插入一个变量3的变量值.
方法如下图
在这里插入图片描述
变量1=1
变量2=2
echo 变量1 变量2出来的是变量值1 变量值2

变量3=1
变量1=2
变量2=3
插入中间变量3,3的变量值是1,
1变量值2
2变量值3
echo 变量1 变量2 出来的是变量值2 变量值1
实际输出变量值2的时候是输出变量值1,因为上面声明了变量3的值是变量1
2=3=1

Shell变量的计算 BC计算器

老牌命令行计算工具
[root@localhost ~]# yum -y install bc
在这里插入图片描述
bc-l #增加数学库

在这里插入图片描述
这种方法适合在脚本中应用.也会用于写一些监控服务器资源的脚本.
[root@localhost ~]# vim 06.bcconstmers.sh
在这里插入图片描述

在这里插入图片描述
let命令也可以用于计算.但要定义变量.

Shell变量提值

[root@localhost ~]# vim 07.variable_values.sh
在这里插入图片描述
这里使用了$( )和``获取到计算器计算的结果并把结果赋值给变量.也叫提值.

在这里插入图片描述
在这里插入图片描述
这里使用了read -p 从命令行的输入中给变量赋值.

脚本中双引号和单引号的问题
在这里插入图片描述
有时候声明变量会遇到像
var01=‘this’s’ my house这种英文缩写,如果这个01变量你想声明的值是this’s的话 这里用单引号就不好了.要用双引号"this’s"给它们包起来作为一个整体.
另外单独用单引号把变量值括起来也是调不到的.
所以这个问题要看具体情况使用.

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值