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 运行脚本

变量

自定义变量

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#

预定义变量

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

#!/bin/bash

#将所有的脚本参数输出到终端

for x in "$@"

do

echo $x

done

echo $?

echo $#

echo $0

条件判断

root@localhost \~# test 3 -gt 2

root@localhost \~# echo $?

0

#!/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

文件目录权限的判断

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

相关推荐
不会C语言的男孩10 分钟前
Linux 系统编程 · 第 2 章:系统调用与库函数
linux·c语言
坤昱13 分钟前
cfs调度类深入解刨——psi科普篇
linux·cfs·psi·cfs调度·eevdf·psi详细分析·linux系统资源监控
骑上单车去旅行38 分钟前
openEuler 22.03 离线源码编译 Zabbix 7.0.27 完整最终整合手册
linux·运维·服务器·zabbix
AC赳赳老秦1 小时前
OpenClaw + 云数据库运维:自动备份、扩容、迁移 RDS/MySQL 云数据库
运维·开发语言·数据库·人工智能·python·mysql·openclaw
向日葵.1 小时前
linux & qnx & git 命令 1
linux·运维·服务器
MXsoft6181 小时前
**非Agent部署:网络设备分钟级纳管的技术解析**
运维·自动化
艾德金的溪1 小时前
windows安装CC Switch
运维·ai
2023自学中1 小时前
Linux 内核与用户空间 内存管理详解(堆与栈篇)
linux·嵌入式·内存·开发板
极客先躯1 小时前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme1 小时前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体