编写一个简单的脚本,以及运行脚本
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命令引用变量
- sed命令使用单引号的情况下,可以使用 '"$var"' 引用(单引号,然后 双引号,变量):
sed -i '2s/node_base/'"i"'/' /etc/libvirt/qemu/i.xml
- sed命令中使用双引号的情况下,直接 shell command 或者 $(shell command) 引用命令执行。
sed -i "2s/node_base/i/" /etc/libvirt/qemu/i.xml






