发现Linux有些命令用起来不太方便,而且查看不直观,所以今天抽时间编写了一下Shell脚本,使用了Bash Shell + Python来实现了一些简单实用的功能,其中就包括了cron计划任务的创建,下面直接贴代码,这里有三个代码快文件:cmnd.py (调用shell脚本),ipaddr.sh(打印本机所有 IP-MAC 地址),cronadd.sh(计划任务创建);
其中计划任务创建的Shell代码较多,但编写完之后,创建计划任务非常规范和简便,可以拿来办公直接使用的!我在最后贴上cron计划任务的Shell脚本,也是非常有用的一个脚本
1. cmnd.py代码 (较简单):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
os.system("echo \"[info]打印相关信息->[输入1:打印进程信息|2:打印ip地址|3:打印端口开启状况|4:创建计划任务]\"")
List1=["Y","n"]
a = input("[info]请输入操作号,exit为退出,按ENTER开始:")
if a == 1:
os.system("top")
elif a == 2:
os.system("./ipaddr.sh")
elif a == 3:
portnum = input("请输入端口号:")
str1 = "netstat -tulnp | grep :" + str(portnum)
str2 = os.system(str1)
elif a == 4:
os.system("./cronadd.sh")
elif a == exit:
print '执行了退出操作...'
else:
print '输入有误,正确的输入为[1|2|3|4|exit]'
'''
cmnd.py
'''
2. ipaddr.sh代码:
#!/bin/bash
DevName=$(ifconfig | grep "flags"| cut -d ':' -f1)
for dev in $(echo $DevName)
do
IPADDR=$(ifconfig $dev | grep -w "inet" | awk '{print $2}')
NETMASK=$(ifconfig $dev | grep -w "netmask" | awk '{print $4}')
MACADDR=$(ifconfig $dev | grep -w "ether" | awk '{print $2}')
echo +---------------------+
echo "网卡 $dev:"
if [ -z "$IPADDR" ];then
echo "IP地址信息:暂无"
else
echo "IP地址信息:$IPADDR"
fi
if [ -z "$NETMASK" ];then
echo "NETMASK地址信息:暂无"
else
echo "NETMASK地址信息:$NETMASK"
fi
if [ -z "$MACADDR" ];then
echo "MAC地址信息:暂无"
else
echo "MAC地址信息:$MACADDR"
echo +---------------------+
fi
done
#ipaddr.sh
ipaddr.sh可单独运行,结果是打印出本机所有的ip信息,没有信息的地方会标记为 暂无:
+---------------------+
网卡 enpXsY:
IP地址信息:暂无
NETMASK地址信息:暂无
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+
+---------------------+
网卡 lo:
IP地址信息:127.0.0.1
NETMASK地址信息:255.0.0.0
MAC地址信息:暂无
+---------------------+
网卡 virbr0:
IP地址信息:192.168.122.1
NETMASK地址信息:255.255.255.0
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+
+---------------------+
网卡 wlpXsY:
IP地址信息:192.168.173.25
NETMASK地址信息:255.255.255.0
MAC地址信息:XX:XX:XX:XX:XX:XX
+---------------------+
3.cronadd.sh代码:
#!/bin/bash
#在使用程序前请务必茶看下面的cron计划任务的大体书写格式,
#当然我编写本程序限定了输入格式,错误的输入不会写入:
# 详细的信息请使用 man 4 crontabs 命令:
# Example of job definition:
# .---------------- minute (0 - 59) #这里格式还可以指定 */10 的格式
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#[CODE START]
#命名计划任务:
CRON_DIR=/etc/cron.d/
read -p "创建计划任务名称:" cronname
CRON_NAME=$cronname
CRON_FILE=$CRON_DIR$CRON_NAME
echo "将创建 $CRON_FILE 文件,正在检查任务名称是否存在..."
#判断计划任务要创建的文件是否存在:
ls $CRON_FILE &> /dev/null
#文件存在后的操作:
while [ $? = 0 ];do
read -p "计划任务名称已经存在,是否进行追加操作(输入yes or no)?" choice
if [ $choice = "yes" ];then
break
elif [ $choice = "no" ];then
read -p "请重新输入计划任务名称:" cronname
CRON_NAME=$cronname
CRON_FILE=$CRON_DIR$CRON_NAME
ls $CRON_FILE &> /dev/null
else
echo "选择不正确"
ls $CRON_FILE &> /dev/null
fi
done
#创建计划任务文件:
touch $CRON_FILE
str1=''
#判断分钟值的格式正确性:
while [ -z $str1 ];do
read -p "请输入分钟:" cron_min
if [ -z "$cron_min" ];then
cron_min="*"
break
fi
num=$(echo $cron_min | wc -L)
if [ $num -eq 1 ];then
str1=$(echo $cron_min | grep ^[0-9,*])
elif [ $num -eq 2 ];then
str1=$(echo $cron_min | grep ^[1-5,/][0-9])
echo $cron_min | grep ^[/] &>/dev/null
if [ $? = 0 ];then
cron_min="*"$str1
fi
elif [ $num -eq 3 ];then
echo $cron_min | grep ^[/] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_min | grep ^[/][1-5][0-9])
cron_min="*"$str1
else
str1=$(echo $cron_min | grep ^[0-9][-][0-9])
fi
elif [ $num -eq 4 ];then
str1=$(echo $cron_min | grep ^[0-9][-][1-5][0-9])
elif [ $num -eq 5 ];then
str1=$(echo $cron_min | grep ^[1-5][0-9][-][1-5][0-9])
else
echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 35-59 等"
str1=''
fi
done
echo "cron_min:"$cron_min
#判断小时值的正确性:
str1=''
while [ -z $str1 ];do
read -p "请输入小时:" cron_hour
if [ -z "$cron_hour" ];then
cron_hour="*"
break
fi
num=$(echo $cron_hour | wc -L)
if [ $num -eq 1 ];then
str1=$(echo $cron_hour | grep ^[0-9,*])
elif [ $num -eq 2 ];then
str1=$(echo $cron_hour | grep ^[0-1,/][0-9])
echo $cron_hour | grep ^[/] &>/dev/null
if [ $? = 0 ];then
cron_hour="*"$str1
fi
echo $cron_hour | grep ^[2] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[2][0-4])
fi
elif [ $num -eq 3 ];then
echo $cron_hour | grep ^[/] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[/][0-1][0-9])
cron_hour="*"$str1
else
str1=$(echo $cron_hour | grep ^[0-9][-][0-9])
fi
echo $cron_hour | grep ^[/][2] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[/][2][0-4])
fi
elif [ $num -eq 4 ];then
str1=$(echo $cron_hour | grep ^[0-9][-][1][0-9])
echo $cron_hour | grep ^[0-9][-][2] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[0-9][-][2][0-4])
fi
elif [ $num -eq 5 ];then
str1=$(echo $cron_hour | grep ^[1][0-9][-][1][0-9])
echo $cron_hour | grep ^[1][0-9][-][2]
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[1][0-9][-][2][0-4])
fi
echo $cron_hour | grep ^[2]
if [ $? = 0 ];then
str1=$(echo $cron_hour | grep ^[2][0-4][-][2][0-4])
fi
else
echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 10-23 等"
str1=''
fi
done
echo "cron_hour:"$cron_hour
#判断天数值的正确性:
str1=''
while [ -z $str1 ];do
read -p "请输入天数:" cron_day
if [ -z "$cron_day" ];then
cron_day="*"
break
fi
num=$(echo $cron_day | wc -L)
if [ $num -eq 1 ];then
str1=$(echo $cron_day | grep ^[1-9,*])
elif [ $num -eq 2 ];then
str1=$(echo $cron_day | grep ^[0-2,/][0-9])
echo $cron_day | grep ^[/] &>/dev/null
if [ $? = 0 ];then
cron_day="*"$str1
fi
echo $cron_day | grep ^[3] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_day | grep [3][0-1])
fi
elif [ $num -eq 3 ];then
echo $cron_day | grep ^[/] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_day | grep ^[/][1-2][0-9])
cron_day="*"$str1
else
str1=$(echo $cron_day | grep ^[1-9][-][1-9])
fi
echo $cron_day | grep ^[/][3] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_day | grep ^[/][3][0-1])
fi
elif [ $num -eq 4 ];then
str1=$(echo $cron_day | grep ^[1-9][-][1-2][0-9])
echo $cron_day | grep ^[1-9][-][3] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_day | grep [1-9][-][3][0-1])
fi
elif [ $num -eq 5 ];then
str1=$(echo $cron_day | grep ^[1-2][0-9][-][1-2][0-9])
echo $cron_day | grep ^[1-2][0-9][-][3]
if [ $? = 0 ];then
str1=$(echo $cron_day | grep ^[1-2][0-9][-][3][0-1])
fi
echo $cron_day | grep ^[3]
if [ $? = 0 ];then
str1=$(echo $cron_day | grep ^[3][0-1][-][3][0-1])
fi
else
echo "输入的格式不正确,正确格式有:1-2 \| /10 \| /1 \| * \| 1-12 \| 18-28 等"
str1=''
fi
done
echo "cron_day:"$cron_day
#判断月份值的正确性:
str1=''
while [ -z $str1 ];do
read -p "请输入月份:" cron_mon
if [ -z "$cron_mon" ];then
cron_mon="*"
break
fi
num=$(echo $cron_mon | wc -L)
if [ $num -eq 1 ];then
str1=$(echo $cron_mon | grep ^[1-9,*])
elif [ $num -eq 2 ];then
str1=$(echo $cron_mon | grep ^[1,/][1-9])
echo $cron_mon | grep ^[/] &>/dev/null
if [ $? = 0 ];then
cron_mon="*"$str1
fi
echo $cron_mon | grep ^[1] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_mon | grep ^[1][0-2])
fi
elif [ $num -eq 3 ];then
echo $cron_mon | grep ^[/] &>/dev/null
if [ $? = 0 ];then
str1=$(echo $cron_mon | grep ^[/][1][0-2])
cron_mon="*"$str1
else
str1=$(echo $cron_mon | grep ^[1-9][-][1-9])
fi
elif [ $num -eq 4 ];then
str1=$(echo $cron_mon | grep ^[1-9][-][1][0-2])
elif [ $num -eq 5 ];then
str1=$(echo $cron_mon | grep ^[1][0-2][-][1][0-2])
else
echo "输入的格式不正确,正确格式有:1-2 \| 12 \| /10 \| /1 \| * \| 1-12 \| 10-11 等"
str1=''
fi
done
echo "cron_mon:"$cron_mon
#day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
echo "请输入星期(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7)"
str1=''
while [ -z $str1 ];do
read -p "输入:" cron_week
num=$(echo $cron_week | wc -L)
if [ $num -eq 0 ];then
cron_week="*"
break
elif [ $num -eq 1 ];then
str1=$(echo $cron_week | grep ^[0-7,*])
echo $cron_week | grep ^[0-7,*]
if [ $? = 1 ];then
echo "输入了不存在的星期,请重新输入"
fi
else
echo "输入不正确,(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7),回车默认为*"
fi
done
echo "cron_week:"$cron_week
str1=''
while [ -z $str1 ];do
read -p "请输入用户名:" cron_user
if [ -z $cron_user ];then
break
fi
id $cron_user
if [ $? = 0 ];then
str1=$cron_user
else
echo "本地用户名不存在,请核对后再输入!"
fi
done
str1=''
while [ -z "$str1" ];do
read -p "请输入命令:" cron_cmnd
if [ -z "$cron_cmnd" ];then
echo "没有输入命令!"
else
str1=$cron_cmnd
fi
done
echo "您的计划任务详细条目为:"
echo "$CRON_FILE:"
if [ -z "$cron_user" ];then
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd"
else
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd"
fi
str1=''
while [ -z $str1 ];do
read -p "确认创建计划任务么(Y/n)" yesno
if [ "$yesno" = "Y" ];then
if [ "$choice" = "yes" ];then
if [ -z "$cron_user" ];then
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd" >> $CRON_FILE
else
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd" >> $CRON_FILE
fi
break
else
if [ -z "$cron_user" ];then
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $USER $cron_cmnd" > $CRON_FILE
else
echo "$cron_min $cron_hour $cron_day $cron_mon $cron_week $cron_user $cron_cmnd" > $CRON_FILE
fi
break
fi
elif [ "$yesno" = "n" ];then
break
else
str1=''
fi
done
echo "计划任务创建成功"
#[CODE END]
这个cronadd.sh脚本执行后操作非常简单,贴上过程:
[root@ServerX cmnd]# ./cronadd.sh
创建计划任务名称:cron1
将创建 /etc/cron.d/cron1 文件,正在检查任务名称是否存在...
计划任务名称已经存在,是否进行追加操作(输入yes or no)?yes
请输入分钟: #Enter
cron_min:*
请输入小时: #Enter
cron_hour:*
请输入天数: #Enter
cron_day:*
请输入月份: #Enter
cron_mon:*
请输入星期(输入0-7任意一个数,1-6为星期一~星期六|星期日请输入0或7)
输入: #Enter
cron_week:*
请输入用户名: #Enter
请输入命令:/bin/bash echo "nihao"
您的计划任务详细条目为:
/etc/cron.d/cron1:
* * * * * root /bin/bash echo "nihao"
确认创建计划任务么(Y/n)Y
计划任务创建成功
You have mail in /var/spool/mail/root
[root@ServerX cmnd]#
一路回车直到提示输入计划任务的命令:/bin/bash echo "nihao" ......OK
计划任务就这样创建好了,创建完成的计划任务是这个:
/etc/cron.d/cron1:
* * * * * root /bin/bash echo "nihao"
如果创建时输入参数不正确,会提示重新输入,并且告诉你输入的格式,相当于限定了格式,但不容易产生错误的计划任务,程序还有待改进,希望大家指正!
最后是cmnd.py的使用,这个程序无非就是把Shell脚本调用了,相当一于一个工具集合,有四个选项:
[root@ServerX cmnd]# ./cmnd.py
[info]打印相关信息->[输入1:打印进程信息|2:打印ip地址|3:打印端口开启状况|4:创建计划任务]
[info]请输入操作号,exit为退出,按ENTER开始:1
top - 16:xx:xx up xx:xx, 3 users, load average: 0.00, x.xx, x.xx
Tasks: xxx total, 1 running, xxx sleeping, 1 stopped, 0 xxxxxx
%Cpu(s): 0.8 us, 0.2 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 3xxxxx4 total, x18xxx4 used, 21x4xx free, 1036 buffers
KiB Swap: 2xxxxx6 total, 0 used, 2047996 free. 4xxx96 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
xxxx root 20 0 xxxxxxx xx2632 3xxx0 S x.x x.x 1x:x1.32 gnome-shell
1 root 20 0 xxxxxx 4148 2xx0 S 0.0 0.1 0:05.6x systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ------
3 root 20 0 0 0 0 S 0.0 0.0 0:00.x0 ksoftirqd/0
5 root 0 20 0 0 0 S 0.0 0.0 0:00.x0 kworker/0:0H
7 root 0 0 0 0 0 S 0.0 0.0 0:00.x2 m-----/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xxx_xxx
大家有什么好的技术也可以互相交流,本人也喜欢探讨一些较深的计算机知识!