shell脚本

shell的概念

脚本就是可运行的代码集合,脚本语言即计算机语言 脚本的特点:从上到下,按行执行。

python也是脚本语言,格式更严谨,严格的执行缩进,也是从上到下按行执行的。

shell脚本是在shell环境(/bin/bash)下 bash就是shell的解释器。是在Linux环境下的编程语句。

目的就是为了实现自动化运维。它是可重复执行的,自动化的在系统中实现增删改查的操作。

shell的解释器,默认就是bash

sh:已经淘汰

bash:sh的拓展版

csh:类c语言

tcsh:整合了c语言的shell

nologin:用户无法登录系统的shell

shell的作用:1.自动化运维

2.批量化的重复操作以及配合定时任务执行

3.有了脚本就可以减轻管理员的工作量

4.避免配置错误

5.提高处理批量文件的速度

shell脚本的构成

第一行:#!/bin/bash

声明shell的解释器(默认就是bash,可以不写,但是其他的都要声明解释器)

第二行:注释:以#开头,就是步骤的含义,被注释掉的部分不会被执行

第三行:可执行语句,Linux的命令都可以作为可执行语句,一行一行的往下写,一行就是一个可执行的语句 echo的作用就是打印

shell的执行方式

1.不给脚本执行权限的执行方式:sh 就是在当前的shell里生成一个子shell,运行的结果不会改变 父shell的环境

source 点命令,它会改变当前shell的环境,也就是真的执行代 码

bash 就是在当前的shell里生成一个子shell,运行的结果不会改 变父shell的环境

2.脚本调试完毕,都是赋权执行: 要先赋权 chmod 777 test.sh

(1)绝对路径执行 /opt/test.sh

(2)当前路径执行 ./test.sh

重定向操作(添加)

重定向输出:> :把标准输出的结果保存到指定的文件,而且会覆盖文件原有的内容

>>:把标准输出的结果保存到指定的文件,原有内容的尾部追加内容,不会覆盖原 有的内容

2> 、2>> 把标准错误输出的结果,保存到指定的文件

&>、&>> 混合输出,既可以保存标准输出,也可以保存标准错误输出

重定向输入:< 从指定的文件获取数据

就是把123456这个结果作为密码修改

变量

变量的作用:用来存放系统和用户需要使用的设定参数(值),变量保存在内存中,调用的时候直接到内存当中查找变量所在的内存地址。

变量的类型:自定义变量:名称由用户自定义,值也可以自定义

全局变量:对整个系统生效,所有用户都可以使用

环境变量:是系统创建的,用来设置用户的工作环境

位置变量:又叫命令行参数,它是在脚本外面给脚本内部传值

预定义变量:是由编程语言和解释器提供的,用户无法更改,只能由系统自行更新 和设置

自定义变量

自定义变量的变量名规范:1.不要使用系统的命令作为变量名

2.不要使用中文

3.不要使用特殊符号开头,但可以用 _ 开头 ,也不要使用数字开头

4.变量名我们一般会使用对应的英文名称来使用,

5.变量名要保存前后一致,要有注释,提高代码的可读性

变量值:int 整数 string 字符串 0.12浮点 truo false 布尔

声明字符串,要用引号引起来。a="test"

echo $a 打印a的结果

双引号、单引号、饭撇号之间的的作用和区别

双引号就是弱引用,变量值就是变量值本身

单引号就是强引号,变量值不再是本身定义的值,保持自身的字符串形式

饭撇号 ` 叫做命令替换,把命令的执行结果传给变量,作为变量的值,先执行命令。再给变量赋值

自定义输入变量的值

全局变量

当前shell的全局变量

整个系统的全局变量

全局变量对整个系统所有用户都可以使用,全局生效。每个脚本的变量值都是固定的。具有持久性,共享性。

全局变量适用于不需要经常更改的值

vim /etc/profile

source /etc/profile

排错的方法:bash -x 脚本名

它会把每一步都打印出来,这样方便定位哪一步有问题

环境变量

环境变量可以理解为特殊的全局变量。在/etc/profile配置文件下

查看环境变量 env

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 可执行的命令或者可执行的程序的默认路径

把哪个目录里的文件变为整个系统可以全局识别的

位置变量

$1-$9

$(10) 10以后要用()

预定义变量

\*和@:表示命令或者脚本需要处理的参数。二者的区别在于处理方式的不同

\*和@不加引号的表示方式一致,都是把参数一个个处理(分行展示)

$*加了引号,会把参数当成一个整体来进行处理(在一行展示)

$# 也是一个全局变量,统计传递给脚本或者函数的参数个数

$? 验证true false 命令执行之后返回的状态码

只有0表示成功

所有非0都表示失败

语法

整数语法格式

c=((a*$b))

c=$(expr $a \* $b)

let c=a\*b

小数运算

bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数

相关推荐
无限大.1 小时前
前端知识速记:节流与防抖
前端
十八朵郁金香1 小时前
【VUE案例练习】前端vue2+element-ui,后端nodo+express实现‘‘文件上传/删除‘‘功能
前端·javascript·vue.js
学问小小谢1 小时前
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
运维·服务器·前端·网络·学习·安全
LCG元2 小时前
Vue.js组件开发-实现全屏图片文字缩放切换特效
前端·javascript·vue.js
还是鼠鼠3 小时前
图书管理系统 Axios 源码__新增图书
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
还是鼠鼠6 小时前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
轻口味6 小时前
Vue.js `Suspense` 和异步组件加载
前端·javascript·vue.js
m0_zj7 小时前
8.[前端开发-CSS]Day08-图形-字体-字体图标-元素定位
前端·css
还是鼠鼠7 小时前
图书管理系统 Axios 源码__编辑图书
前端·javascript·vscode·ajax·前端框架
北极象7 小时前
vue3中el-input无法获得焦点的问题
前端·javascript·vue.js