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

相关推荐
绵绵细雨中的乡音1 小时前
网络基础知识
linux·网络
Peter·Pan爱编程1 小时前
Docker在Linux中安装与使用教程
linux·docker·eureka
kunge20132 小时前
Ubuntu22.04 安装virtualbox7.1
linux·virtualbox
清溪5492 小时前
DVWA中级
linux
MUY09902 小时前
应用控制技术、内容审计技术、AAA服务器技术
运维·服务器
楠奕2 小时前
elasticsearch8.12.0安装分词
运维·jenkins
Sadsvit3 小时前
源码编译安装LAMP架构并部署WordPress(CentOS 7)
linux·运维·服务器·架构·centos
xiaok3 小时前
为什么 lsof 显示多个 nginx 都在 “使用 443”?
linux
java资料站3 小时前
Jenkins
运维·jenkins
苦学编程的谢4 小时前
Linux
linux·运维·服务器