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 
2. sed命令中使用双引号的情况下,直接 shell command 或者 $(shell  command) 引用命令执行。

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

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值