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

相关推荐
hanniuniu131 分钟前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号14 分钟前
Prometheus 上手指南
linux·运维·centos·prometheus
Asher Gu20 分钟前
Linux系统编程入门 | 模拟实现 ls -l 命令
linux
c无序37 分钟前
【Linux进程控制】进程程序替换
linux
m0_609000422 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
CoolTiger、6 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
m0_741768856 小时前
使用docker的小例子
运维·docker·容器
学习3人组7 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神7 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu