编写一个简单的脚本,以及运行脚本
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