【无标题】shell脚本的基本命令+编写shell脚本

shell脚本

一.shell基础

1.shell概念

2.shell脚本

3.shell脚本编写注意事项

二.编写shell脚本

1.编写一个helloworld脚本,运行脚本

[root@shell ~]# vim helloworld.sh
#!/bin/bash  //声明
echo "hello world!"
ls -lh /etc/
运行脚本(四种方式):
[root@shell ~]# bash helloworld.sh
[root@shell ~]# sh helloworld.sh
[root@shell ~]# source helloworld.sh
[root@shell ~]# chmod +x helloworld.sh 
[root@shell ~]# ./helloworld.sh
​

2.编写一个nginx安装脚本

[root@shell ~]# mkdir /root/shell
[root@shell ~]# vim /root/shell/install_nginx.sh
#!/bin/bash
yum -y install gcc gcc-c++ make pcre-devel oprnssl-devel wget
cd /usr/local/scr/
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@shell shell]# cd /root/shell
[root@shell shell]# sh install_nginx.sh
​

三.变量

1.自定义变量

[root@shell shell]# set a=3
[root@shell shell]# echo a
a
[root@shell shell]# unset a
[root@shell shell]# echo a
a
[root@shell shell]# echo $a
​

2.环境变量

由系统维护,用于设置工作环境

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

$PWD

$SHELL

$USER

[root@shell shell]# vim test1.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
echo $5
[root@shell shell]# bash test1.sh 1 2 3 4 5
1
2
3
4
5
​
​
[root@shell shell]# bash test1.sh t j j f b
t
j
j
f
b
​

3.位置变量

[root@shell ~]# vim creat.sh
#!/bin/bash
useradd $1
echo $2|passwd --stdin $1
[root@shell ~]# sh creat.sh

4.预定义变量

[root@shell ~]# vim ss.sh
#!/bin/bash
#将所有的脚本参数输出
for x in "$*"
doecho $x
done
[root@shell ~]# sh ss.sh a b c
a b c
[root@shell ~]# sh ss.sh g q i g d
g q i g d
将*改为@运行
[root@shell ~]# sh ss.sh g q i g d
g
q
i
g
d
​

四.判断语法

shell的返回值:运行一条命令,都会有一个返回值,0表示执行正常,非0表示执行异常。

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

1.条件判断---if语句

[root@shell ~]# vim if.sh
#!/bin/bash
echo "1:"
read a
echo "2:"
read b
if [ $a -eq $b ]; thenecho "相等"
elseecho "不相等"
fi
[root@shell ~]# sh if.sh
1:
3
2:
5
不相等
​

2.创建检测脚本,检测网络是否流畅

[root@shell ~]# vim web.sh
#!/bin/bash
read -p "输入网址:" web  //read:命令行输入web的值
ping -c 3 $web &> /dev/null  //连接某个网站三次
if [ $? -eq 0 ]; then   //如果ping命令执行成功echo "网络畅通"
elseecho "网络异常"
fi
root@shell ~]# sh web.sh
输入网址:www.baidu.com
网络畅通
​

五.字符串判断格式:

1.字符串的比较

[root@shell ~]# aaa="abc"
[root@shell ~]# echo $aaa
abc
[root@shell ~]# test $aaa == "abc"
[root@shell ~]# echo $?
0
[root@shell ~]# test $aaa == "dggn"
[root@shell ~]# echo $?
1
[root@shell ~]# unset aaa
[root@shell ~]# echo $aaa
​
​
​

2.案例

(1)创建简单的字符串判断脚本

[root@shell ~]# vim zfc.sh
#!/bin/bash
read -p "请输入账号" user
echo $user
if [ $user == "admin" ]; thenecho "欢迎登录:$user"
elseecho "账号或密码错误"
fi
[root@shell ~]# sh zfc.sh
请输入账号admin
admin
欢迎登录:admin
[root@shell ~]# sh zfc.sh
请输入账号egu
egu
账号或密码错误
​

(2)创建rpm查询软件是否安装

[root@shell ~]# vim rpm.sh
#!/bin/bash
rpm -qa|grep nginx
#echo $?
yum -y install epel.release
if [ $? -eq 1 ];thenyum -y install nginx
elseyum -y remove nginxyum -y install nginx
fi
[root@shell ~]# sh rpm.sh

六.文件,目录,权限的判断

1.格式:

2.常用操作符:

[root@shell ~]# touch abc
[root@shell ~]# ls -lh abc
-rw-r--r--. 1 root root 0 7月  26 11:26 abc
[root@shell ~]# [ -e "abc" ]
[root@shell ~]# echo $?
0
[root@shell ~]# [ -e "ewf" ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -e "aaaaaa" ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -w "aaaaaa" ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -x "abc" ]
[root@shell ~]# echo $?
1
[root@shell ~]# chmod +x abc
[root@shell ~]# [ -x "abc" ]
[root@shell ~]# echo $?
0
[root@shell ~]# ls -l abc
-rwxr-xr-x. 1 root root 0 7月  26 11:26 abc
​

3.案例

nginx安装脚本优化,判断是否已经安装nginx

七.与或判断

判断多个条件

多个条件其中一个成立,或

多个条件都要成立,与

或运算判断:||

与运算判断:&&

1.或运算

[root@shell ~]# vim huo.sh
#!/bin/bash
read -p "请输入名称" name
if [ $name == "haha" ]||[ $name == "xixi" ];thenecho "成立"
elseecho "不成立"
fi
[root@shell ~]# sh huo.sh
请输入名称haha
成立
​

2.与运算

[root@shell ~]# vim yu.sh
#!/bin/bish
read -p "请输入年龄" age
read -p "请输入性别" gender
if [ $age -ge 30 ] && [ $gender == "女" ];thenecho "涨工资"
elseecho"不加"
fi
[root@shell ~]# sh yu.sh
请输入年龄34
请输入性别女
涨工资
​

3.多层判断

[root@shell ~]# vim dc.sh
#!/bin/bash
echo "1新增文件 2删除文件 3修改文件 4查找文件"
read -p "请选择序号" m
if [ $m == 1 ];thentouch aaaaa.txt
elif [ $m == 2 ]; thenrm -fr aaaaa.txt
elseecho "其他功能正在开发"
fi
[root@shell ~]# sh dc.sh
​

八.shell读取用户输入

1.read

格式:read -选项

[root@shell ~]# read -p "请输入" -s s
请输入[root@shell ~]# echo $s
aadswdqdweqhjhbnhbuuiwefggywgywygfe
[root@shell ~]# read -p "请输入" s
请输入dtdyuj
[root@shell ~]# echo $s
dtdyuj
[root@shell ~]# read -p "三个变量" a b c
三个变量12 13 14
[root@shell ~]# echo $a
12
[root@shell ~]# echo $b
13
[root@shell ~]# echo $c
14
[rot@shell ~]# vim pas.sh
#!/bin/bash
read -p "username:" username
read -p "password:" -s password
useradd $useranme
echo $password|passwd --stdin $username
if [ $? -eq 0 ]; thenecho "账户$username注册成功"
fi
​

九.循环语法

1.for循环

[root@shell ~]# vim int.sh
#!/bin/bash
for x in $*
doecho $x
done
[root@shell ~]# sh int.sh 我 是 秦始皇
我
是
秦始皇
[root@shell ~]# vim int.sh
#!/bin/bash
for city in 青岛 北京 天津
doecho "$city是个好地方"
done
[root@shell ~]# sh city.sh
青岛是个好地方
北京是个好地方
天津是个好地方
​
​

在命令结果中循环

在命令结果中循环:
[root@shell ~]# vim 1.sh
#!/bin/bash
for u in $(awk -F':' '{print $1}' /etc/passwd)
do   echo "$u"
done
[root@shell ~]# sh 1.sh

检查某个网段的存活主机

[root@shell ~]# vim ping.sh
#!/bin/bash
for IP in $(echo 12.168.2.{1..150})
doping -c 2 -i 0.1 $IP &> /dev/null
if [ $? -eq 0 ]; thenecho "$IPisup "
fi
done
[root@shell ~]# bash ping.sh
​

2.while循环

3.循环的break和continue

break ---直接退出

continue---退出当前循环,进入下次循环

九九乘法表

[root@shell ~]# vim jj.sh
#!/bin/bash
for i in {1..9};do
for j in {1..9};do
echo -n "$j*$i=$(($i*$j)) "
if [ $j == $i ];then
echo -e '\n'
break
fi
done
done
[root@shell ~]# bash jj.sh
1*1=1 
​
1*2=2 2*2=4 
​
1*3=3 2*3=6 3*3=9 
​
1*4=4 2*4=8 3*4=12 4*4=16 
​
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
​
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
​
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
​
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
​
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

十.sed

sed是文本处理工具,用来读取文件内容

格式:sed '过滤+动作' 文件路径

sed选项:

[root@shell ~]# rm -rf *
[root@shell ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 ./
[root@shell ~]# sed -n '2p' ifcfg-ens33 //打印第二行
PROXY_METHOD=none
[root@shell ~]# sed -n '1,3p' ifcfg-ens33  //打印1到3行
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
[root@shell ~]# sed -n '1p;3p' ifcfg-ens33 //打印1,3行 
TYPE=Ethernet
BROWSER_ONLY=no
​

配置一个自动设置静态ip以及关闭selinux服务,关闭NetWorkManager,修改主机名脚本,ip和主机名使用read输入,这个操作只能在root下执行

[root@shell ~]# vim zd.sh
#!/bin/bash
#备份
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak
read -p "请输入ip地址:" ip
sed -i '/dhcp/s/dhcp/none/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aIPADDR='"$ip"'' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aNETMASK=255.255.255.0' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aGATEWAY=192.168.2.1' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '$aDNS2=114.114.114.114' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '/UUID/cUUID='"$(uuidgen)"'' /etc/sysconfig/network-scripts/ifcfg-ens33

#修改主机名
read -p "请输入主机名称:" hn
hostnamectl set-hostname $hn

#停用selinux
setenforce 0
sed -i '/SELINUX/cSELINUX=disabled' set /etc/selinux/config

#停用防火墙
systemctl stop firewalld
systemctl disable firewalld

#停用NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager

[root@shell ~]# bash zd.sh
 

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

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

相关文章

c/c++的内存管理(超详细)

一、c/c的内存分布 这是操作系统中对于内存的划分: 我们重点掌握以下几个区域即可: 1.栈 (调用函数会建立栈帧) 2.堆(动态开辟的空间) 3.数据段(静态区):存放静态变量以及全局变量 4.代码段 (常量区) 先来看看一个题目: int…

[物联网专题] RS485继电器输出之Modbus控制流程和时间优化分析

在工控领域,往往需要大量的输入信号和输出控制信号,以接收各种传感信号和产生输出控制动作。由于PLC的输出触点数量有限,或者因为更多输出触点的PLC价格昂贵,性价比并不高。为了解决这个矛盾,基于MODBUS协议的继电器IO…

数据结构:基础概念

一、相关概念 概念 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合:所有数据在同一个集合中,关系平等。 线性:数据和数据之间是一对一的关系 树: 一对多 图:多对多 物理结构(在内存当中的存储关系)…

AC695x BLE OTA调试

SDK版本:AC695N_soundbox_sdk_release_3.1.0AC695x SDK支持BLE OTA升级,使用杰理公版APP升级即可。SDK需要做一些调整,板级文件需要增加如下配置,使能OTA升级 #define TCFG_APP_BT_EN 1#define APP_UPDATE_EN …

Three.js动效(第09辑):令人瞠目结舌的交互效果,沉浸式体验

three.js能够实现各种3D动态效果,不禁有小伙伴问了,实现这些效果到底有什么意思,其实最大的意义就是给用户沉浸式的体验,瞬间专注用户注意力。 Three.js能够带来以下沉浸式体验: 3D虚拟现实体验: 使用Th…

MATLAB-bode图编程

num[1 1];den [2 1];tf(num,den)bode(tf(num,den));hold on

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

Bert文本分类和命名实体的模型架构剖析

文章目录 介绍Bert模型架构损失计算方式BertForSequenceClassificationBertForTokenClassification Bert 输出结果剖析例子 参考资料 介绍 文本分类:给一句文本分类; 实体识别:从一句文本中,识别出其中的实体; 做命名…

由于误操作原因丢失了照片?6 款 Android 照片恢复应用程序可能有帮助

由于意外删除,软件故障,系统崩溃,恢复出厂设置或任何其他原因,您可能会丢失Android手机中的照片。无论如何,您仍然有很大的机会借助Android照片恢复应用程序恢复照片。有很多应用程序提供恢复支持,但并非所…

zeal 开发者离线文档工具

zeal是一款程序开发者不可或缺的离线文档查看器 下载地址 官网地址: windows版csdn下载:https://zealdocs.org/download.html#windows windows版官网下载:https://zealdocs.org/download.html#windows 下载压缩版,解压即用相对…

Matlab类阿克曼车机器人运动学演示

v1是后驱动轮轮速, v2是转向角变化速度, 实际上我们只需要关注XQ, YQ和Phi的变化率。 通过这三项和时间步长, 我们就可以计算出变化量, 再结合初始值就能推断出每个时刻的值。 % 清理当前运行环境 % 清除所有变量 cle…

搭建自己的金融数据源和量化分析平台(三):读取深交所股票列表

这里放出深交所爬虫模块的代码: # -*- coding: utf-8 -*- # 深圳交易所爬虫 import osimport pandas as pd import requests#读取最新深交所股票列表 def get_stock_list():cache_file_path "./sotck_file.xlsx"url "https://www.szse.cn/api/rep…

Passing output of 3DCNN layer to LSTM layer

题意:将3DCNN(三维卷积神经网络)层的输出传递给LSTM(长短期记忆网络)层 问题背景: Whilst trying to learn Recurrent Neural Networks(RNNs) am trying to train an Automatic Lip Reading Model using 3…

Linux基础I/O之文件描述符fd 重定向(下)

目录 四、文件描述符 4.1 文件描述符的内核本质 4.2 文件描述符的分配规则 五、重定向 四、文件描述符 在回忆起上述知识后,那么文件描述符到底是什么呢? 我们不难注意到,刚刚的open接口系统调用接口其实是有返回值的(一个int…

FTP(File Transfer Protocal,文件传输协议)

文章目录 引言FTP管理工具FTP客户端FTP连接模式控制连接数据连接FTP命令/响应FTP命令FTP响应FTPSSFTP引言 FTP(File Transfer Protocal,文件传输协议)用于建立两台主机间的数据文件传输下载。使用客户/服务器(Client/Server)架构,基于TCP协议,服务端口为21。 FTP链接…

17.延迟队列

介绍 延迟队列,队列内部是有序的,延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中,消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺,如果十天内没…

行锁表锁都是渣渣,元数据锁才是隐藏大佬

什么是元数据锁? 英文名叫Metadata Lock,缩写为MDL,顾名思义,它是针对元数据的一种锁,锁的是元数据。 那什么是元数据? 一张表有100条记录,这里的记录我们可以称之为表数据,一张表…

深入了解:MinIO 企业对象存储的可观察性

可观测性是指收集信息(跟踪、日志、指标),以提高性能、可靠性和可用性为目标。很少有人能确定其中一个事件的根本原因。通常情况下,当我们将这些信息关联起来形成叙述时,我们就会有更好的理解。从一开始,Mi…

7.27扣...

知识点补充: 1.StringBuilder StringBuilder 类在 Java 中是一个可变字符序列。与 String 类不同,StringBuilder 可以在创建之后被修改。这意味着你可以向 StringBuilder 对象追加、插入或删除字符,而不需要创建新的对象(辅助数…

池化层pytorch最大池化练习

神经网络构建 class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.maxpool1 MaxPool2d(kernel_size3, ceil_modeFalse)def forward(self, input):output self.maxpool1(input)return output Tensorboard 处理 writer SummaryWriter("./l…