当前位置: 首页 > news >正文

shell编程语言-1 shell脚本基础

1、shell脚本基础

1.1 shell的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

如何查看本机shell信息        cat /etc/shells

1.2 脚本执行逻辑

逻辑: 1.顺序  2.选择  3.循环

1.3 脚本错误调试

1.命令错误

2.语法错误

3.逻辑错误 

4.查看代码是否正确

bash -n 脚本名称 – 检查语法错误

bash -x 脚本名称 – 逻辑错误 – 将脚本所有的语句执行一遍

bash $0执行上一条脚本

5.set -e

在脚本前输入set -e 一旦出错立即停止

2、重定向和管道符

2.1重定向

含义:把文件重新输出到你指定的位置。

类型操作符用途
重定向输入<从指定文件读取数据而不是从键盘输入
重定向输出1>将输出结果保存到指定的文件(覆盖原有内容)
追加>>将输出结果追加到指定文件的尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原文件内容)
混合输出&>将标准输出、标准错误的内容保存到同一个文件中
追加标准错误输出2>>标准错误输出结果追加到指定文件尾部

2.2 管道符 |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

3、变量

3.1.1弱引用和强引用

“ ” 表示弱引用,可以调用变量的值

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

3.1.2 read -p

其含义是从键盘输入的内容变成变量

Read -p  read -p”你想说的话” 变量名

3.1.3 export 定义全局变量

如果没有export 那么开启一个新的bash 将不会继承定义的变量

4、条件语句

4.1 操作符

如果要测试是否成功使用 $? 返回值

        成功状态码:大多数命令在执行成功时会返回 0

        失败状态码:执行失败时返回非 0 的数值(通常为 1-255 之间的整数,具体含义由命令定义)。

-d : 测试是否为目录

-e : 测试目录或文件是否存在

-f : 测试是否为文件

-r : 测试当前用户是否有权限读取

-w : 测试当前用户是否有权限写入

-x : 测试当前用户是否有权限执行

-L : 测试文件是否为软连接文件

-N FILE :文件自从上一次被读取之后是否被修改过

-O FILE :当前有效用户是否为文件属主

-G FILE :当前有效用户是否为文件属组

4.2 比较整数的数值

expr计算参数值

-eq : 等于

-ne : 不等于

-gt : 第一个数大于第二个数

-lt : 第一个数小于第二个数

-le : 第一个数小于或等于第二个数

-ge : 第一个数大于或等于第二个数

4.3 字符串的比较

= : 字符串内容相同

!= : 字符串内容不同,!表示相反的意思

-z : 字符串内容为空

-n : 字符是否存在

4.4 逻辑测试 与 和 或

第一个要为真 第二个也要为真

一个为假就为假

cmd1 && cmd2

一真即为真

第一个为真 那么 不用执行第二个

第一个为假 才需要执行第二个

cmd1 || cmd2

cmd1 || cmd2 && cmd3

如果cmd1为假 就执行cmd2判断是否为真,如果cmd2为假,那么就不会执行cmd3了,整个式子为假。

如果cmd1为真,就不会执行cmd2了。执行cmd3。

判断磁盘使用情况是否正常|| echo 正常 && echo 不正常

4.5 if语句的结构

分支结构

单分支

if 判断条件;

then 条件为真的分支代码

fi

双分支

if 判断条件; then

   条件为真的分支代码

else

条件为假的分支代码

fi

多分支

if 判断条件

then;执行语句1

elif;

then;执行语句2

elif;

then ;执行语句3

fi

条件2为真的分支代码

elif 判断条件3;then

 条件3为真的分支代码

...

else

 以上条件都为假的分支代码  托底

例子:

2.case

case $i in

PAT1)

分支1

;;

PAT2)

分支2

;;

...

*)

默认分支

;;

例子:

5.循环

for     一直循环次数

while 未知循环次数

until  未知循环次数(几乎没人用)

5.1 for循环

for 名称(变量名)循环列表(循环次数)

do

命令序列

done

for 变量名 in 取值列表

do

命令序列

done

for 变量名 in

5.2 while 循环

条件为真执行

条件为假跳出循环

while 判断条件

do

命令序列

done

6.函数和数组

函数 :

简化脚本

脚本代码可变性较高

os 判断系统类别的脚本

1.定义函数

2.调用函数

定义函数

1.

function 函数名{

函数体

}

2.

函数名(){

函数体

}

3.

function (){

函数体

}

上传 :scp 要传输的文件 IP地址:接收文件的文件夹(绝对路径)

定义数组

数组名=(数组值1 数组值2.................)

数组名[下标]=数组值

  1. 查看数组中所有元素

  • echo ${数组名[@]}

  • echo ${数组名[*]}

  1. 查看数组中的具体元素

  • echo ${数组名[下标]}

  1. 显示数组中所有下标

  • echo ${! 数组名[@]}

  • echo ${! 数组名[*]}

  1. 查看数组中元素的总个数

  • echo ${#数组名[*]}

7.echo

在操作系统的命令行界面中,echo是用于输出文本或变量值的基础命令。

下面是一些基本的例子:

主机名

hostname

IP地址 

ifconfig ens33|grep inet | tr -s " " |cut -d " " -f3 |head -n 1

内存容量

free -h | grep Mem|tr -s " "| cut -d " " -f2

磁盘容量

lsblk | grep "sd"| head -n1| tr -s " "|cut -d " " -f4

cpu

lscpu| grep "型号名称"| tr -s " "

内核版本

uname -r

系统版本

cat /etc/redhat-release

#!/bin/bash

echo "hostname : `hostname`"

echo "ip地址:`ifconfig ens33 | grep netmask| tr -s " "| cut -d " " -f3 `"

echo "内存容量:` free -h |grep Mem|tr -s " "| cut -d " " -f2 ` "

echo "磁盘容量:`lsblk | grep "sd"| head -n1| tr -s " "|cut -d " " -f4 `"

echo "cpu`lscpu| grep "型号名称"| tr -s " "`"

echo "内核版本:`uname -r`"

echo "系统版本:`cat /etc/redhat-release`"

8.export

export 可以让子shell共享变量

/etc/profile

设置环境变量或系统默认环境配置的配置文件

~/bshrc只对当前用户生效
~/.bash_profile只对当前用户生效
/etc/profile对所有用户生效
/etc/profile.d/*.sh对所有用户生效

9.预定义(状态)变量

bash 帮你定义好了 拿来用就可以了

$*表示所有位置参数的内容看成一个整体返回 返回所有 (加引号 “$*”)
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有 (加引号 "$@")
$?表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#表示命令行中位置参数的总个数
$0表示当前执行的脚本或程序的名称 当前脚本的名字
$$当前bash的进程id
$!后台任务最后一个id

相关文章:

  • Docker 基础使用
  • 分类预测 | Matlab基于AOA-VMD-LSTM故障诊断分类预测
  • MVVM模式中,BaseViewModel 的 IsBusy 属性的作用
  • 矩阵混剪系统源码搭建全流程技术解析,矩阵OEM
  • LeetCode 第74题:搜索二维矩阵
  • 动态多目标进化算法:基于迁移学习的动态多目标粒子群优化算法(TrMOPSO)求解IEEE CEC 2015,提供完整MATLAB代码
  • MATLAB提供的两种画误差矩阵的函数
  • 【MATLAB例程】追踪法制导的程序,适用于三维平面,目标是运动的,带绘图和捕获时间|附下载链接
  • 经典蓝牙 vs BLE:10 大核心差异深度对比(附高频考点 + 大厂真题)
  • 基于docker技术的单主机环境模拟测试批量客户端
  • 软件测试质量的“防”与“治”
  • 【0.1 漫画计算机组成原理】
  • PCB设计教程【大师篇】stm32开发板PCB布线(信号部分)
  • langchain从入门到精通(六)——LCEL 表达式与 Runnable 可运行协议
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——B
  • 出现端口占用,关闭端口进程命令
  • LeetCode 第73题:矩阵置零
  • EngineAI 1. Start/Resume Training
  • 1.1 Linux 编译FFmpeg 4.4.1
  • Git详解:初学者完全指南
  • 南京公司网站建设怎么收费/友情链接互换
  • 长沙做网站工作室/无锡网站优化公司
  • 有帮忙做ppt的网站或人吗/关于进一步优化
  • 网站建设api/济南竞价托管公司
  • 图库网站源码下载/全网推广成功再收费
  • 网络推广网站排名/域名检测工具