shell

本文详细介绍了Shell脚本的基础知识,包括何时使用脚本、脚本基本写法、通配符、批量重命名、变量分类与操作、数组、交互式定义变量、条件判断和流程控制语句。通过实例展示了如何利用Shell进行自动化任务,如判断主机间通信、进程存在性检查、用户管理等,同时讲解了循环语句如for和while循环的使用,帮助读者掌握Shell脚本在系统管理和自动化操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

shell介绍

shell介于内核与用户之间,负责命令的解释
在这里插入图片描述

一、shell脚本

  • 就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译
  • 若干命令 + 脚本的基本格式 + 脚本特定语法 + 思想 = shell脚本

1么时候用到脚本:

重复化,复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作

  • 自动化分析处理
  • 自动化备份
  • 自动化批量部署安装
  • 等等

二、脚本的基本写法

这里是引用

三、通配符

这里是引用
我有这么些文件在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、rename批量重命名

这里是引用

五、变量的分类

1.本地变量:

  • 本地变量:
    当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效
    在这里插入图片描述

2.环境变量:

  • 环境变量:
    当前进程有效,并且能够被子进程调用
    查看当前用户的环境变量 env
    查询当前用户的所有变量(临时变量和环境变量) set
    export 将当前变量变成环境变量
    在这里插入图片描述
    当第三方下载的软件命令找不到时,可能是环境变量没有添加,永久生效需要在/etc/profile文件中添加一行 export PATH=…:$PATH

3.全局变量:

  • 全局变量:
    全局所有的用户和程序都能调用,且继承,新建的用户也默认能使用
    在这里插入图片描述

4.系统变量(内置bash中变量):

shell本身已经固定好了它的名字和作用

这里是引用
在这里插入图片描述

这里是引用

在这里插入图片描述
这是我写的lin.sh
在这里插入图片描述
此处的.sh文件没有可执行权限,给它添加一个
在这里插入图片描述
看,添加可执行权限后变绿了
在这里插入图片描述在这里插入图片描述

六、变量的定义

这里是引用
unset 变量名(是取消变量)在这里插入图片描述

七、变量的定义规则

不能以数字开头,可以用字母,_ ,开头,变量名不能有特殊字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、数组

  • 普通数组:只能使用整数作为数组索引(元素的下标)
  • 关联数组:可以使用字符串作为数组索引(元素的下标)

1.普通数组的定义:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里是引用
这样写也可以
在这里插入图片描述

2.关联数组的定义及获取:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、交互式定义变量(read)

主要用于让用户去定义变量值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、删除变量内容(扩展)

在这里插入图片描述
这里是引用
在这里插入图片描述
在这里插入图片描述

十一、简单的四则运算

算术运算:默认情况下,shell就只支持简单的整数运算
+ - * / %(取模,求余数)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

默认的shell不支持小数运算,想让它可以小数运算可以使用bc
yum install -y bc.x86_64
在这里插入图片描述
在这里插入图片描述

十二、条件判断

这里是引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-s选项(测试看看文件里有没有内容)
在这里插入图片描述

1.文件权限相关的判断:

这里是引用

2.两个文件的比较判断:

这里是引用
在这里插入图片描述
在这里插入图片描述

3.整数之间的判断:

这里是引用
在这里插入图片描述

4.字符串之间的判断:

这里是引用
在这里插入图片描述

5.多重条件判断:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.字符串比较:

在这里插入图片描述

7.[ ] 和 [[ ]]的区别:

这里是引用
在这里插入图片描述

十三、流程控制语句(if)

这里是引用
在这里插入图片描述

十四、案例1(判断当前主机是否能和远程主机ping通)

思路:

  • 使用哪个命令实现 ping -c
  • 根据命令的执行结果状态来判断是否ping通 $?
  • 条件判断,流程控制
    在这里插入图片描述
    在这里插入图片描述

1.优化1:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.优化2:

在这里插入图片描述
这里是引用

十五、案例2(判断一个进程是否存在)

思路:

  • 查看进程的相关命令 ps -ef;pgrep;ps -aux;pidof;
  • 根据命令的返回状态值来判断进程是否存在 $?
  • 根据逻辑用脚本实现
    这里pgrep可以用pidof在这里插入图片描述
    在这里插入图片描述

十六、循环语句

1.for循环:

  • 列表循环:用于将一组命令执行已知的次数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 不带列表循环:不带列表的for循环执行时由用户指定参数和参数的个数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 类c风格的for循环:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

①.案例1(计算1-100的奇数之和)

思路:

  • 定义一个变量来保存奇数的和 sum=0
  • 找出1-100的奇数,保存到另一个变量中
  • 从1-100中找出奇数后,再相加,然后将和赋值给sum变量
  • 遍历完毕后,将sum的值打印出来
    这里脚本里的运算采用的是四则运算
    在这里插入图片描述
    在这里插入图片描述

2.循环控制:

这里是引用

①.案例2(输入一个正整数,判断是否为质数)

质数(素数):只能被1和它本身整除的数

思路:

  • 让用户输入一个数,保存到一个变量里
  • 如果能被其他数整除就不是质数
  • 如果输入的是1或者2,直接先排除掉
  • 测试序列从2开始,输入的是4–>得出结果$sum不能和$i相等,并且$sum不能小于$i
    在这里插入图片描述
    在这里插入图片描述

②.案例3(批量增加5个新用户,以lin1-lin5命名,并统一加一个新组,组名为chaochao,统一该密码为123456)

思路:

  • 添加用户的命令useradd
  • 判断组是否存在
  • 根据题意,判断该脚本循环5次来添加用户
  • 给用户设置密码,应该放到循环体里面
    在这里插入图片描述

③.案例4(批量创建5个新用户test1-test5,要求这几个用户的家目录都在/rhome 提示:需要判断该目录是否存在)

④.案例5(写一个脚本,局域网内,把能ping通的ip和不能ping通的ip分类,并保存到两个文本文件里,这是一个局域网内机器检查通讯的一个思路)

不过这样子是串行执行的,如果主机太多的话,要等好久好久好久的在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.while循环:

条件为真就进入循环,条件为假就退出循环
在这里插入图片描述

①.用while循环计算1-50的偶数和:

这里是引用
在这里插入图片描述

4.until循环:

条件为假进入循环,条件为真退出循环
语法结构和while一样

①.应用案例(使用until语句批量创建10个用户,要求stu1-stu5用户的UID分别为1001-1005,stu6-stu10用户的家目录分别在/rhome/stu6-10)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值