【无标题】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://www.mzph.cn/web/49716.shtml

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

相关文章

C语言字符函数与字符串函数超详解

文章目录 前言1. 字符分类函数2. 字符转换函数3. strlen3. 1 strlen 的使用3. 2 strlen 的模拟实现 4. strcpy4. 1 strcpy 的使用4. 2 strcpy 的模拟实现 5. strcat5. 1 strcat 的使用5. 2 strcat 的模拟实现 6. strcmp6. 1 strcmp 的使用6. 2 strcmp 的模拟实现 7. strncpy 函…

VI/VIM编辑器及三种模式

目录 1. 三种模式 2. 使用 VIM 3. i/ a/ o 进入输入模式 VI/VIM是 visual interface 的缩写是 Linux 中最经典的文本编辑器; VIM是 VI 的增强版本,兼容 VI 的所有指令,不仅能够编辑文本,还具有 shell 程序编辑的功能&#xff…

maven引入了jar包但在class文件里找不到jar包里的类

在工作当中遇到的这个问题,别人引入的jar包,我代码里报错 maven clean 和 maven install 都不管用 检查过了pom文件 检查了maven仓库路径下是否有这个cn.hutool的jar包 都没有找到问题 最终解决办法是手动引入 步骤一:点击左上角file->…

3.4-GRU

1网络结构 1.1与LSTM相比 LSTM里面有三个门,还有一个增加信息的tanh单元,参数量相较于RNN显著增加; 因此GRU在参数上比LSTM要少; 另外,LSTM 将必要信息记录在记忆单元中,并基于记忆单元的信息计算隐藏状…

MySQL数据库(基础篇)

🌏个人博客主页:心.c 前言:今天讲解的是MySQL的详细知识点的,希望大家可以收货满满,话不多说,直接开始搞! 🔥🔥🔥文章专题:MySQL 😽感…

1.c#(winform)编程环境安装

目录 安装vs创建应用帮助查看器安装与使用( msdn) 安装vs 安装什么版本看个人心情,或者公司开发需求需要 而本栏全程使用vs2022进行开发c#,着重讲解winform桌面应用开发 使用***.net framework***开发 那先去官网安装企业版的vs…

AI绘画入门实践 | Midjourney:使用 --chaos 给图像风格来点惊喜

在 Midjourney 中,--chaos 影响初始图像网格的多样性,指 MJ 每次出的4张图之间的差异性。 默认值为0,值越高,差异性越大。 使用格式:--chaos 0-100的整数值 使用演示 a lot of flowers --chaos 0 --v 6.0a lot of fl…

项目打包与运行

前端运行时必须有与后端相同的数据库版本,数据库账号密码 右侧maven -> 展开要打包的项目 -> 生命周期 -> 双击package 打包好之后在target目录下 右键打开 在资源目录下输入cmd,执行以下命令即可运行(端口号为yml文件…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端: 对前端项目在cmd中进行start nginx.exe,端口号为8080 后端: 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录(不推荐) &#xf…

【iOS】—— retain\release实现原理和属性关键字

【iOS】—— retain\release实现原理和属性关键字 1. retain\reelase实现原理1.1 retain实现原理1.2 release实现原理 2. 属性关键字2.1 属性关键字的分类2.2 内存管理关键字2.2.1 weak2.2.2 assgin2.3.3 strong和copy 2.4 线程安全的关键字2.5 修饰变量的关键字2.5.1常量const…

文件上传总结

一、原理 通过界面上的上传功能上传了一个可执行的脚本文件,而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好,使得恶意用户可以通过文件中上传的一句话木马获得操控权 二、绕过方法 1>前端绕过 1.删除前端校验函数 checkFile() 2.禁用js…

大数据平台之HBase

HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是Apache Hadoop生态系统的重要组成部分。它特别适合大规模结构化和半结构化数据的存储和检索,能够处理实时读写和批处理工作负载。以下是对HBase的详细介绍。 1. 核心概念 1.1 表&#x…

打造一篇完美的【数学建模竞赛论文】:从准备到撰写的全面指南

目录 一、赛前准备 1.1 报名与纪律要求 1.2 MD5码上传 1.3 竞赛准备 1.4 时间分配 二、论文格式规范 2.1 摘要 2.2 参考文献 2.3 排版要求 三、建模过程与方法 3.1 问题分析与模型假设 3.2 模型构建与求解 3.3 结果分析与检验 四、论文撰写技巧 4.1 论文结构 4…

Godot入门 07 世界构建2.0

添加基础节点Node,重命名为Coins,整理场景树,拖动Coin到Coins节点下。 添加基础节点Node,重命名为Platforms,整理场景树,拖动Platform到Platforms节点下。 添加游戏背景 设置当前图层名称为Mid 添加图层元…

飞牛爬虫FlyBullSpider 一款简单方便强大的爬虫,限时免费 特别适合小白!用它爬下Boss的2024年7月底Java岗位,分析一下程序员就业市场行情

一、下载安装FlyBullSpider 暂时支持Window,现在只在Win11上做过测试 1 百度 点击百度网盘 下载 链接:https://pan.baidu.com/s/1gSLKYuezaZgd8iqrXhk8Kg 提取码:Fly6 2 csdn https://download.csdn.net/download/fencer911/89584687 二、体验初…

vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。

1、上个图&#xff0c;要实现这样的&#xff1a; Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行&#xff0c;当前行是唯一的&#xff1b;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…

C++入门基础(超详细) 需:C语言基础

1.C的发展史 大致了解一下 C的起源可以追溯到1979年&#xff0c;当时BjarneStroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不 同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开 发任务&#xff0c;特别是模拟和操作系…

Linux权限维持篇

目录 SSH后门 &#xff08;1&#xff09;软链接sshd &#xff08;2&#xff09;SSH Key 生成公私钥 创建个authorized_keys文件来保存公钥 通过修改文件时间来隐藏authorized_keys &#xff08;3&#xff09;SSH Keylogger&#xff08;记录日志&#xff09; Linux的PA…

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发&#xff0c;但是者不代表它没有UI库&#xff0c;不能做GUI&#xff0c;我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力&#xff0c;非常适合用于开发GUI…

MICA:面向复杂嵌入式系统的混合关键性部署框架

背景 在嵌入式场景中&#xff0c;虽然 Linux 已经得到了广泛应用&#xff0c;但并不能覆盖所有需求&#xff0c;例如高实时、高可靠、高安全的场合。这些场合往往是实时操作系统的用武之地。有些应用场景既需要 Linux 的管理能力、丰富的生态&#xff0c;又需要实时操作系统的高…