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

相关推荐
盛满暮色 风止何安17 分钟前
VLAN的高级特性
运维·服务器·开发语言·网络·网络协议·网络安全·php
lemon3106241 小时前
dockerfile制作镜像
linux·运维·服务器·学习
易保山2 小时前
MIT6.S081 - Lab5 Lazy(延迟分配)
linux·操作系统·c
AI享网无代码创作2 小时前
WP Mail 邮件发送:WordPress Mail SMTP设置
运维·服务器·网络
想躺在地上晒成地瓜干3 小时前
树莓派超全系列文档--(14)无需交互使用raspi-config工具其一
linux·树莓派·raspberrypi·树莓派教程
Shier833_Ww3 小时前
目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
linux·yolo·ubuntu
唐青枫4 小时前
Linux 历史命令操作教程
linux
愚润求学4 小时前
Linux基础指令(一)
linux·服务器·语法
struggle20254 小时前
AWS Bedrock 多代理蓝图存储库使用 CDK、Streamlit 和 LangFuse 运行 AWS Bedrock 多代理 AI 协作的蓝图
运维·人工智能·自动化·云计算·aws
IEVEl5 小时前
CentOS 7 安装 EMQX (MQTT)
linux·运维·centos