zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

shell脚本

2023-02-18 16:34:39 时间

shell脚本创建过程

  • 第一步:使用文本编辑器来创建文本文件

  • 第二步:加执行权限

  • 第三步:运行脚本

说明:
  1. 第一行必须包括shell声明序列:#!

  2. 添加注释,注释以#开头

  3. 给予执行权限,在命令行上指定脚本的绝对或相对路径

  4. 可以直接运行解释器,将脚本作为解释器程序的参数运行

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