shell脚本相关应用

news2024/11/28 2:38:12

编写一个简单的脚本,以及运行脚本

  301  vim helloworld.sh

#!/bin/bash
echo "hello world!"
ls -lh /etc/
 

执行的方式如下:
  302  bash helloworld.sh 
  303  sh helloworld.sh 
  304  chmod +x helloworld.sh 
  305  ./helloworld.sh

  306 source helloworld.sh 
 

脚本安装nginx

[root@localhost ~]# vim nginx.sh

#!/bin/bash
yum -y install gcc gcc-c++ make pcre-devel openssl-devel wget
cd /usr/local/src
wget 'https://nginx.org/download/nginx-1.26.1.tar.gz'
tar xf nginx-1.26.1.tar.gz
cd nginx-1.26.1
./configure --prefix=/usr/local/nginx
make -j 4
make install
[root@localhost ~]# bash nginx.sh         运行脚本

变量

自定义变量

[root@localhost ~]# b=3
[root@localhost ~]# echo $b
3
[root@localhost ~]# unset b
[root@localhost ~]# echo $b

[root@localhost ~]# 

环境变量

[root@localhost ~]# echo $PWD        当前所在的目录是不是需要的目录
/root
[root@localhost ~]# echo $PATH
/usr/local/mongodb/bin:/usr/local/mongodb/bin:/opt/apache-maven-3.6.3/bin:/usr/local/jdk17/bin/:/opt/apache-maven-3.6.3/bin:/usr/local/jdk17/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]# echo $USER
root

env是环境的意思

位置变量

脚本或者应用需要参数的时候可以使用

在脚本中读取到5个参数,并且输出到终端

[root@localhost ~]# vim test001.sh

#!/bin/bash

echo $1
echo $2
echo $3
echo $4
echo $5
[root@localhost ~]# bash test001.sh 1 2 3 4 5
1
2
3
4
5
 

[root@localhost ~]# vim c.sh

#!/bin/bash
useradd $1
echo $2|passwd --stdin $1

[root@localhost ~]# bash c.sh zzzz zzzz
更改用户 zzzz 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# su zzzz
[zzzz@localhost root]$ cd
[zzzz@localhost ~]$ su root
密码:
[root@localhost zzzz]# 

预定义变量

[root@localhost ~]# vim i.sh

#!/bin/bash 
#将所有的脚本参数输出到终端
for x in "$*"
do
        echo $x
done

[root@localhost ~]# bash i.sh a b c
a b c
[root@localhost ~]# bash i.sh 1 3 5 a b c
1 3 5 a b c

#!/bin/bash 
#将所有的脚本参数输出到终端
for x in "$@"
do
        echo $x
done

#!/bin/bash 
#将所有的脚本参数输出到终端
for x in "$@"
do
        echo $x
done
echo $?
echo $#
echo $0

条件判断

[root@localhost ~]# test 3 -gt 2
[root@localhost ~]# echo $?
0

#!/bin/bash
num1=3 
num2=4
if [ $num1 -eq $num2 ]; then
        echo "两个数字相等"
fi
[root@localhost ~]# bash if.sh 
[root@localhost ~]# 
 

#!/bin/bash
if [ $1 -eq $2 ]; then
        echo "两个数字相等"
else
        echo "两个数值不相等"
fi
[root@localhost ~]# bash if.sh 3 3
两个数字相等
[root@localhost ~]# bash if.sh 33 3
两个数值不相等
 

#!/bin/bash
echo "1:"
read a
echo "2:"
read b
if [ $a -eq $b ]; then
        echo "两个数字相等"
else
        echo "两个数值不相等"
fi
[root@localhost ~]# bash if.sh 
1:
4
2:
6
两个数值不相等
[root@localhost ~]# bash if.sh 
1:
2
2:
2
两个数字相等
 

检测网络是否畅通:

#!/bin/bash
read -p "请输入测试的网站:"web
ping -c 3 $web & > /dev/null
if [ $? -eq 0 ];then            # 如果ping命令执行成功,那么
                echo "此时⽹络畅通!"   # 输出“此时网络畅通”
else    # 否则
                echo "⽆法访问,请检查⽹址是否输⼊正确或检查相关的⽹络配置!"           # 输出“无法访问...”
fi              # if语句的结尾

[root@localhost ~]# vim ping.sh
[root@localhost ~]# bash ping.sh www.baidu.com
请输入测试的网站:www.baidu.com
此时⽹络畅通!
[root@localhost ~]# PING www.a.shifen.com (180.101.50.242) 56(84) bytes of data.
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=1 ttl=128 time=19.5 ms
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=2 ttl=128 time=23.0 ms
64 bytes from 180.101.50.242 (180.101.50.242): icmp_seq=3 ttl=128 time=51.3 ms

--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 19.517/31.314/51.345/14.239 ms

变量赋值

[root@localhost ~]# aaa="abc"
[root@localhost ~]# echo $aaa
abc
[root@localhost ~]# test $aaa == "abc"
[root@localhost ~]# echo $?
0
[root@localhost ~]# test $aaa == "aaa"
[root@localhost ~]# echo $?
1
[root@localhost ~]# 

[root@localhost ~]# unset $aaa
[root@localhost ~]# echo $aaa
abc
[root@localhost ~]# unset aaa
[root@localhost ~]# echo $aaa

[root@localhost ~]# test -z $aaa
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -n $aaa
[root@localhost ~]# echo $?
0
 

判断账号

[root@localhost ~]# vim zifu.sh

#!/bin/bash
read -p "请输入账号:" user
if [ $user == "admin"  ]; then
        echo "欢迎登录:$user"
else
        echo "账号或者密码错误"
fi
[root@localhost ~]# bash zifu.sh 
请输入账号:admin
欢迎登录:admin
[root@localhost ~]# bash zifu.sh 
请输入账号:aaa
账号或者密码错误

检查有没有安装nginx

#!/bin/bash
rpm -qa | grep nginx
echo $?

[root@localhost ~]# bash login001.sh 
1

是否安装nginx,安装了就卸载了重装

#!/bin/bash
rpm -qa | grep nginx
#echo $?
if [ $? -eq 1  ]; then
        yum -y install nginx
else
        yum -y remove nginx
        yum -y install nginx
fi

文件目录权限的判断

[root@localhost ~]# touch abc
[root@localhost ~]# ls -l ab
ls: 无法访问ab: 没有那个文件或目录
[root@localhost ~]# ls -l abc
-rw-r--r--. 1 root root 0 7月  26 11:26 abc
[root@localhost ~]# [ -e "/abc"  ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e "z"  ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e "abc"  ]
[root@localhost ~]# echo $?
0
 

[root@localhost ~]# [ -w "abc"  ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -x "abc"  ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# ls -l abc
-rw-r--r--. 1 root root 0 7月  26 11:26 abc
[root@localhost ~]# chmod +x abc        添加执行权限,再判断
[root@localhost ~]# [ -x "abc"  ]
[root@localhost ~]# echo $?
0

应用:

#!/bin/bash
read -p "请输入名称" name
if [ $name == "haha"  ] || [ $name == "hehe"  ];then
        echo "此人相当友好"
else
        echo "登徒浪子"
fi 
[root@localhost ~]# bash b.sh 
请输入名称hhh
登徒浪子
[root@localhost ~]# bash b.sh 
请输入名称haha
此人相当友好
[root@localhost ~]# bash b.sh 
请输入名称hehe
此人相当友好
 

#!/bin/bash
read -p "请输入年龄" age
read -p "请输入性别" gender
if [ $age -ge 30 ] && [ $gender == "女" ]; then
        echo "工资加两千,每顿饭加个鸡腿"
else
        echo "你要继续努力哦"
fi
[root@localhost ~]# bash z.sh 
请输入年龄32
请输入性别nv
你要继续努力哦
[root@localhost ~]# bash z.sh 
请输入年龄44
请输入性别女
工资加两千,每顿饭加个鸡腿
 

多项选项:

#!/bin/bash
echo "1新增文件 2删除文件 3修改文件 4查找文件"
read -p "请输入序号选择功能" m
if [ $m == 1  ] ;then
        touch aaaaa.txt
elif [ $m == 2  ];then
        rm -rf aaaaa.txt
else
        echo "其他功能正在开发"
fi

read的使用

[root@localhost ~]# read -p "输入一个数据" s        有回显
输入一个数据aavvv
[root@localhost ~]# echo

[root@localhost ~]# echo $s
aavvv
[root@localhost ~]# read -p "输入一个数据" -s s        没有回显
输入一个数据[root@localhost ~]# 
[root@localhost ~]# echo $s
bbbb

[root@localhost ~]# read -p "三个变量" a b c        三个变量赋值
三个变量12 13 14
[root@localhost ~]# echo $a 
12
[root@localhost ~]# echo $b
13
[root@localhost ~]# echo $c
14

#!/bin/bash

read -p "username:" username
read -p "password:" password
useradd $username
echo $password | passwd --studin $username
if [ $? -eq 0  ];then
        echo "账户$username 注册成功"
fi
 

sed流式编辑器


(一)概述
sed 是文本处理工具,读取文本内容,根据指定条件进行处理,可实现增删改查的功能。sed 依赖于正则表达式。 
1、格式
sed '过滤+动作' 文件路径
2、选项
-e 指定要执行的命令 (操作) ,只有一个编辑命令 (操作) 时可省略  
-n 只输出处理后的行,读入时不显示,不对原文件进行修改  
-i 直接修改源文件,不输出结果  
3、操作
p 打印(输出) 
d 删除(整行) 
s 替换(字符串匹配) 
c 替换(整行) 
r 读取指定文件(追加到行后) 
a (append)追加到指定内容到行后 
i (insert)追加指定内容到行前
 
w 另存为  
n 表示读入下一行内容 
H 复制到剪贴板  
g 将剪贴板中的内容覆盖到指定行 
G 将剪贴板中的内容追加到指定行后  
(二)sed命令引用变量
1. sed命令使用单引号的情况下,可以使用 '"$var"' 引用(单引号,然后 双引号,变量): 

sed -i '2s/node_base/'"$i"'/' /etc/libvirt/qemu/$i.xml 
2. sed命令中使用双引号的情况下,直接 shell command 或者 $(shell  command) 引用命令执行。

sed -i "2s/node_base/$i/" /etc/libvirt/qemu/$i.xml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1951945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】数据链路层实验

一:实验目的 1:学习WireShark软件的抓包操作,分析捕获的以太网的MAC帧结构。 2:学习网络中交换机互相连接、交换机连接计算机的拓扑结构,理解虚拟局域网(WLAN)的通信机制。 3:学习…

stm32入门-----TIM定时器(输入捕获模式——下)

目录 前言 一、C语言编程初始化步骤 1.开启时钟 2.配置GPIO口 3.配置时基单元 4.配置输入捕获单元(主模式) 5.配置触发源于从模式 6.开启定时器 二、项目实操(测周法) 1.定时器测量方波 2.定时器测量方波的占空比 前言 接…

nginx的学习(二):负载均衡和动静分离

简介 nginx的负载均衡和动静分离的简单使用 负载均衡配置 外部访问linux的ip地址:80/edu/a.html地址,会轮询访问Tomcat8080和Tomcat8081服务。 Tomcat的准备 准备两个Tomcat,具体准备步骤在nginx的学习一的反向代理例子2中,在Tomcat8080…

搜索引擎项目构建与解析(一)

这是源码,大家可以下载下来作为参考,一起食用效果更佳:SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com)https://gitee.com/yxuan-wang/submit/tree/master/SearchEngine搜索引擎项目总体来看内容比较简单,代码量也比较…

【计算机方向】五本“三区水刊”重磅推荐!几乎不拒收,国人发文友好!

本期将为您带来五本计算机SCI 妥妥毕业神刊! AUTONOMOUS AGENTS AND MULTI-AGENT SYSTEMS International Journal on Document Analysis and Recognition COMPUTATIONAL INTELLIGENCE IET Biometrics ACM Transactions on Asian and Low-Resource L…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

物联网主机 E6000:智慧应急领域的创新力量

在当今瞬息万变的世界中,突发事件和紧急情况时有发生。如何迅速、准确地应对这些挑战,保障人民生命财产安全,成为了社会发展的重要课题。而物联网主机 E6000 的出现,为智慧应急领域带来了全新的解决方案。 一、强大的性能与功能 物…

opencv使用KCF算法跟踪目标,给出目标中心位置

效果图 代码 import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path video_pathself.cap cv2.VideoCapture(video_path)self.tracker cv2.legacy.TrackerKCF_create()self.initBB Noneself.tracker_initialized Falseself.selecting Fals…

如何进行小程序的调试

Errno错误码 在使用部分小程序 API / 组件时,抛出的异常(fail 回调 / Promise reject)Error 对象中除了带有 errMsg,还会带有通用错误码 errno。 代码示例 wx.openBluetoothAdapter({success (res) {console.log(res)}fail (er…

时间序列分析方法之 -- 指数平滑(Exponential Smoothing)

目录 原理 适用情况 Python 示例代码 结论 原理 指数平滑(Exponential Smoothing)是一种用于时间序列分析和预测的平滑技术。与简单移动平均(SMA)和加权移动平均(WMA)不同,指数平滑通过对最…

VS+opencv+环境配置

下载opencv库。 版本 - OpenCV 下载完了是一个exe文件,(可以更换目录)直接双击,也就是压缩。 vs配置: 调试-调试属性 点编辑,加入这两个,路径根据自己的opencv库 3、链接器 测试:…

《Java初阶数据结构》----8.<java对象的比较总结>

目录 前言 一、Java对象的比较 1.1基本类型的比较 1.2 对象比较的问题(与equals) 1.3对象的比较 (三种常用方式) 1.重写equals方法 2.基于Comparble接口类的比较 3.基于比较器比较(Comparator接口) …

如何在网站嵌入可填写的PDF表单:2024巴黎奥运会赛程

如何将可填写的 PDF 表单嵌入您的网页?访问者无需下载或注册即可查看并填写。 简单!本文以2024巴黎奥运会赛程表单为例,演示如何将其嵌入网页中。您可以在 ONLYOFFICE 表单库免费获取该模板,有白色和紫色两种背景设计。 如何在网站…

uniapp中出现图片过小会与盒子偏离

结论&#xff1a;在image的父盒子中加上display: flex&#xff0c;原因不清楚 出问题的代码和图片如下&#xff1a; <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …

UCOS-III 任务调度锁定/解锁接口OSSchedLock/Unlock详解

在实时操作系统中&#xff0c;任务调度是系统实现多任务并发执行的核心机制。但在某些场景下&#xff0c;我们需要临时关闭任务调度&#xff0c;以确保某段代码在执行过程中不被打断。下面将详细介绍这两个接口的应用场景及实现原理。 1. 关闭调度的应用场景 关闭任务调度的主要…

Windows环境下部署本地大模型教程

自ChatGPT在2022年爆发式出圈以来&#xff0c;大模型对人类世界产生了重大影响&#xff0c;无论是在生产、工作、写作方面还是自动驾驶领域&#xff0c;大模型发挥了非常重要的作用。 现各大厂&#xff0c;无论是国内大厂还是国外大厂&#xff0c;都纷纷推出了自己的对话大模型…

服务暴露 traefik

一。traefik 部署 前置资源 还是那个网站&#xff0c;这里复制 entryPoints&#xff0c;进入traefik的大门 可选在哪台机器上部署 traefik 部署 用 Daemonset 的方式是为了&#xff0c;加机器到集群后&#xff0c;能自动部署traefik 到目标机器 注意 8084端口 必须加…

【JVM基础06】——组成-直接内存详解

目录 1- 引言&#xff1a;直接内存概述1-1 直接内存是什么&#xff1f;直接内存的定义(What)1-2 为什么用直接内存&#xff1f;Java程序对直接内存的使用 (Why) 2- ⭐核心&#xff1a;详解直接内存(How)2-1 文件拷贝案例介绍对比常规 IO(BIO) 和 NIO常规 IO 的操作流程NIO 的操…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…