1、脚本的执行方法
[root@CENTOS8-2 data]# bash hello.sh
Hello world!
[root@CENTOS8-2 data]# cat hello.sh |bash
Hello world!
[root@CENTOS8-2 data]# chmod +x hello.sh
[root@CENTOS8-2 data]# /data/hello.sh
Hello world!
[root@CENTOS8-2 data]# ./h
hanoi_tower_1.1.sh hello.sh hostping.sh
[root@CENTOS8-2 data]# ./hello.sh
Hello world!
远程执行
yum install httpd -y
systemctl httpd start
cp hello.sh /var/www/html/
curl -s http://127.0.0.1/hello.sh |bash
wget -qO - http://127.0.0.1/hello.sh |bash
2、备份脚本
#!/bin/bash
COLOR="\033[1;32m"
END="\033[0m"
echo -e ${COLOR}Starting backup...${END}
sleep 2
cp -av /etc/ /opt/etc`date +%F`/
echo -e ${COLOR}Starting fimished${END}
3、脚本检查
只检测脚本中的语法错误,无法检查出命令错误,但不执行脚本
bash -n hello.sh
调试并执行
bash -x hello.sh
总结:脚本常见错误
语法错误:会导致后续的命令不继续执行,可以用bash -n检查错误
命令错误:默认后续的命令还会执行,用bash -n无法检查出来,
可以使用bash -x 进行观察
逻辑错误:只能用bash -x进行观察
4、变量的使用
变量赋值
直接引用:name='root'
变量引用:name="$NAME"
命令引用:name=`COMMAND` 或 $(COMMAND)
变量引用
$name
${name}
"$name" 弱引用
'$name' 强引用,变量不会被替换成变量值,保持原字符串
变量追加值
PATH+=":/data"
[root@CENTOS8-2 data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
利用变量实现动态命令
[root@CENTOS8-2 data]# CMD=hostname
[root@CENTOS8-2 data]# $CMD
CENTOS8-2
[root@CENTOS8-2 data]# echo $CMD
hostname
[root@CENTOS8-2 data]# CMD=`hostname`
[root@CENTOS8-2 data]# echo $CMD
CENTOS8-2
显示所有变量
set
删除变量
unset <name>
5、脚本练习
显示系统信息脚本
#!/bin/bash
RED="\e[1;31m"
GREEN="echo -e \e[1;32m"
END="\e[0m"
$GREEN------------------------Host systeminfo----------------------$END
echo -e "HOSENAME:$RED`hostname`$END"
echo -e "IPADDR:$RED`ifconfig ens33 |grep -E "inet\b"|tr -s " " : |cut -d: -f3`$END"
#ifconfig ens33 |grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" |head -n 1
echo -e "OSVERSION:$RED`cat /etc/redhat-release`$END"
echo -e "KERNEL:$RED`uname -r`$END"
echo -e "CPU:$RED`lscpu |grep "Model name" |tr -s " "|cut -d: -f2`$END"
echo -e "MEMORY:$RED`free -h |grep "Mem" |tr -s " " :|cut -d: -f2`$END"
echo -e "DISK:$RED`lsblk |grep -E "sda\b" |tr -s " " :|cut -d: -f5`$END"
#lsblk |grep -E "^sda" |tr -s " " :|cut -d: -f5
$GREEN-------------------------------------------------------------$END
[root@CENTOS8-2 data]# bash system_info.sh
------------------------Host systeminfo----------------------
HOSENAME:CENTOS8-2
IPADDR:10.0.0.204
OSVERSION:CentOS Linux release 8.1.1911 (Core)
KERNEL:4.18.0-147.el8.x86_64
CPU: Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz
MEMORY:1.8Gi
DISK:200G
-------------------------------------------------------------
显示连接本机的每个远程主机的IP地址和连接数,并排序
[root@CENTOS8-2 ~]# last |grep -Eo "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" |sort -nr |uniq -c
8 10.0.0.1
1 8 21:21:37
1 4.18.0-147