shell脚本创建过程
-
第一步:使用文本编辑器来创建文本文件
-
第二步:加执行权限
-
第三步:运行脚本
说明:
-
第一行必须包括shell声明序列:#!
-
添加注释,注释以#开头
-
给予执行权限,在命令行上指定脚本的绝对或相对路径
-
可以直接运行解释器,将脚本作为解释器程序的参数运行
shell脚本的编写规则:
首行shebang机制,用户指定shell脚本后面需要使用的解释器
shell 脚本调试
bash -n
只检测脚本中的语法错误,但无法检查出命令错误,但不真正执行脚本
bash -x
把脚本中的每条命令的执行情况打印出来
#语法错误:会导致后续命令不执行
使用bash -n
#命令错误:后续命令依然会执行
使用bash -x 来跟踪命令的执行过程。
#逻辑错误:输出结果不对
使用bash -x 检查
shell脚本实践
范例:显示系统信息
[root@CentOS7 ~]# cat 1.sh
#!/bin/bash
ED="\E[1;31m"
GREEN="\E[1;32m"
END="\E[0m"
echo -e "$GREEN----------------------Host systeminfo--------------------$END"
echo -e "HOSTNAME: $RED`hostname`$END" #显示主机名
echo -e "IPADDR: $RED` ifconfig eth0|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |head -n1`$END" ##显示ip地址
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" #CPU版本
echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ' ' : |cut -d : -f2`$END" #内存信息
echo -e "DISK: $RED`lsblk |grep '^sd' |tr -s ' ' |cut -d " " -f4`$END" #磁盘信息
echo -e "$GREEN---------------------------------------------------------$END"
[root@CentOS7 ~]# bash 1.sh
----------------------Host systeminfo--------------------
HOSTNAME: CentOS7
IPADDR: 10.0.0.17
OSVERSION: CentOS Linux release 7.6.1810 (Core)
KERNEL: 3.10.0-957.el7.x86_64
CPU: Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
MEMORY: 3.8G
DISK: 50G
---------------------------------------------------------
实现每日将 /etc/ 目录备份到 /backup/etcYYYY-mm-dd中
[root@CentOS7 ~]# cat 1.sh
#!/bin/bash
BACKUP=/BACK
SRC=/etc
DATE=`date +%F`
if ! test -e $BACKUP ;then #如果这个目录文件不存在
mkdir $BACKUP
echo hello workd
fi
mkdir ${BACKUP}/${DATE}
cp -av $SRC ${BACKUP}/${DATE}
echo backup is finished
查看进程的环境变量:
cat /proc/PID/environf
[root@CentOS7 ~]# cat /proc/9204/environ |tr '\0' '\n'
HOME=/root
USER=root
SHELL=/bin/bash
TERM=linux
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAIL=/var/mail/root
LOGNAME=root
XDG_SESSION_ID=1
XDG_RUNTIME_DIR=/run/user/0
XDG_SEAT=seat0
XDG_VTNR=1