shell脚本相关应用

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

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 运行脚本 ![](https://i-blog.csdnimg.cn/direct/b2df35dae92d49a3aa161ed9d7d6bcd4.png) ![](https://i-blog.csdnimg.cn/direct/b9443513a0d04ced9e22aa416ad646db.png)

变量

自定义变量

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\]# ### 预定义变量 ![](https://i-blog.csdnimg.cn/direct/441094d35f9345ae9bded1be47502074.png) > \[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 > ![](https://i-blog.csdnimg.cn/direct/8c5208f694e34a41baae3f1dd1fec52e.png) > #!/bin/bash > > #将所有的脚本参数输出到终端 > > for x in "$@" > > do > > echo $x > > done > > echo $? > > echo $# > > echo $0 > ![](https://i-blog.csdnimg.cn/direct/2a10915ca37542e39b047b3d9890398b.png) > ## 条件判断 ![](https://i-blog.csdnimg.cn/direct/7cff694bfdb44c0089ca16dfbf121f04.png) \[root@localhost \~\]# test 3 -gt 2 \[root@localhost \~\]# echo $? 0 ![](https://i-blog.csdnimg.cn/direct/07bb2f79493e4ea089c4e0a70e40fe5c.png) > #!/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 > ![](https://i-blog.csdnimg.cn/direct/080702c569b84f3a8e26b26f90d81077.png) > 文件目录权限的判断 > > ![](https://i-blog.csdnimg.cn/direct/2d9aa98cc16541b5902c8162a0f0111b.png) > > \[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

  1. sed命令中使用双引号的情况下,直接 shell command 或者 $(shell command) 引用命令执行。

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

相关推荐
Lalolander6 分钟前
设备制造行业如何避免项目管理混乱?
运维·制造·工程项目管理·四算一控·epc·环保设备工程·设备制造
LucianaiB25 分钟前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓
prinrf('千寻)40 分钟前
nacos设置权重进行负载均衡不生效
运维·负载均衡
Lary_Rock1 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
熬夜学编程的小王1 小时前
【Linux篇】理解信号:如何通过信号让程序听从操作系统的指令
linux·信号产生·软件条件产生信号
绵绵细雨中的乡音1 小时前
Linux进程学习【基本认知】
linux·运维·学习
Johny_Zhao1 小时前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
珹洺2 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
再睡一夏就好2 小时前
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
linux·服务器·c语言·c++·笔记
剁椒排骨2 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10