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 天前
macOS下载、安装 Tailwind CSS-v4.3.3(附安装包tailwindcss-macos-arm64)
前端·css·macos·tailwind css·utility-first·css 框架·实用优先
shawxlee1 天前
vue3+axios挑战最简洁实用的配置封装+接口调用:请求拦截器、响应拦截器、通用请求方法(单个请求/并发请求/下载文件)、统一接口管理
前端·经验分享·vue·接口·axios·api
yuhaiqiang1 天前
上线一个人静态网站需要多少钱,难不难?
前端·后端·程序员
宸津-代码粉碎机1 天前
Jar热部署进阶实战|修复原生方案OOM与类冲突问题,生产级无BUG优化方案
java·大数据·服务器·开发语言·前端·人工智能·python
To_OC1 天前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus1 天前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮1 天前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
徐小夕1 天前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
kyriewen1 天前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz1 天前
Rust &‘static str浅析
java·前端·javascript·rust