shell-杂项

网友投稿 756 2022-05-28

十、shell杂项

一、输入输出

输入输出

文件描述符 | 描述 | 映射关系

—|---|—

0 | 标准输入 | /dev/stdin -> /proc/self/fd/0

1 | 标准输出 | /dev/stdout -> /proc/self/fd/1

2 | 标准错误 | /dev/stderr -> /proc/self/fd/2

重定向

shell-杂项

> :符号左边输出作为右边的输入 >>: 符号左边输出追加右边的输入 < : 符号右边输出作为左边输入(标准输入) <<: 符号右边输出追加左边输入 & : 重定向绑定符号

eg:

cat > file.txt </dev/null 2>&1

二、命令

tac:倒序打印文件

rev反向打印每一行

cut:字符切割,常用选项-d 分割,-f输出第几段

tr:替换或删除字符

seq:打印序列化数字

sort:排序

-t:制定分隔符

-k:制定field

-r:倒序排序

-u:去重行

uniq:去重 -c 打印出现次数、-u :打印不重复的行

date:显示系统时间

时间加减: 显示前 30 秒:date -d '-30 second' +'%F %T' 显示前一分钟:date -d '-1 minute' +'%F %T' 显示前一个时间:date -d '-1 hour' +'%F %T' 显示前一个天:date -d '-1 day' +'%F %T' 显示上一周:date -d '-1 week' +'%F %T' 显示上一个月日期:date -d '-1 month' +%F 显示上一年日期:date -d '-1 year' +%F 或 显示前一天日期:date -d yesterday +%F 显示后一天日期:date -d tomorrow +%F

screen

screen -ls

screen -r

screen -wipe

脚本编写注意事项

1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格;多加注释说明。 3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 4)默认变量是全局的,在函数中变量 local 指定为局部变量,避免污染其他作用域。 5)有两个命令能帮助我调试脚本:set -e 遇到执行非 0 时退出脚本,set -x 打印执行过程。 6)写脚本一定先测试再到生产上。

三、实战

更多示例可参考:shell 脚本示例

#!/bin/bash #func:scan file #md5sum -c $SCAN_FILE SCAN_DIR=`echo $PATH |sed 's/:/ /g'` SCAN_CMD=`which md5sum` SCAN_FILE_FALL="/tmp/scan_$(date +%F%H%m)_fall.txt" SCAN_FILE_BIN="/tmp/scan_$(date +%F%H%m)_bin.txt" scan_fall_disk() { echo "正在全盘扫描,请稍等!文件路径:$SCAN_FILE_FALL" find / -type f -exec $SCAN_CMD \{\} \;>> $SCAN_FILE_FALL 2>/dev/null } scan_bin() { echo "正在扫描PATH可执行文件,请稍等,文件路径:$SCAN_FILE_BIN" for file in $SCAN_DIR do find $filae -type f -exec $SCAN_CMD \{\} \;>> $SCAN_FILE_BIN 2>/dev/null done } main() { [ $# -lt 1 ] && echo "请使用参数,1表示全盘扫描,2表示二进制可执行文件扫描" read number case $number in 1) scan_fall_disk;; 2) scan_bin;; *) echo "参数错误,1,表示全盘扫描,2表示二进制文件扫描" esac } main

#!/bin/bash # function:自定义rm命令,每天晚上定时清理 CMD_SCRIPTS=$HOME/.rm_scripts.sh TRASH_DIR=$HOME/.TRASH_DIR CRON_FILE=/var/spool/cron/root BASHRC=$HOME/.bashrc [ ! -d ${TRASH_DIR} ] && mkdir -p ${TRASH_DIR} cat > $CMD_SCRIPTS <> $CRON_FILE echo "删除目录:$TRASH_DIR" echo "删除脚本:$CMD_SCRIPTS" echo "请执行:source $BASHRC 来加载文件或退出当前shell重新登录"

#!/bin/bash # auth:kaliarch # func:sys info check # version:v1.0 # sys:centos6.x/7.x [ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 sysversion=$(rpm -q centos-release|cut -d- -f3) line="-------------------------------------------------" [ -d logs ] || mkdir logs sys_check_file="logs/$(ip a show dev eth0|grep -w inet|awk '{print $2}'|awk -F '/' '{print $1}')-`date +%Y%m%d`.txt" # 获取系统cpu信息 function get_cpu_info() { Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l) Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l) CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}') CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq) CPU_Arch=$(uname -m) cat </dev/null) if [ ${sysversion} -gt 6 ];then service_config=$(systemctl list-unit-files --type=service --state=enabled|grep "enabled") run_service=$(systemctl list-units --type=service --state=running |grep ".service") else service_config=$(/sbin/chkconfig | grep -E ":on|:启用" |column -t) run_service=$(/sbin/service --status-all|grep -E "running") fi cat </dev/null|cut -d/ -f5;egrep -v "^$|^#" ${cronuser} 2>/dev/null;echo "";done) cat < ${sys_check_file}

Shell

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux 性能监控和优化介绍
下一篇:OpenStack 虚拟机热迁移流程图
相关文章