60天shell脚本计划-4/12-渐入佳境
--作者:飞翔的小胖猪
--创建时间:2021年2月11日
--修改时间:2021年2月15日
说明
每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。
每篇文章包含5个脚本。
总进度:4/12
上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14380780.html
下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14401712.html
主要内容
21年2月11日-猜大小脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本调用系统变量RANDOM生成一个0‐32767的随机数,通过取余的方式得到0-100的数。每次读取用户如输入的数字和生成的数对比,如果相等则提示成功,同时判断是猜了几次猜对的。
加入判断用户输入的确实为数字,且小于100。否则提示输入错误的类型。暂时未实现。
文件说明
Bulls_and_Cows.sh:脚本主体文件
脚本主体
[root@135 16_Bulls_and_Cows]# cat Bulls_and_Cows.sh
#!/bin/bash
# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数,通过取余将随机数变为 0‐100的随机数。
rownum=$[RANDOM%100]
let input_n=1
echo "自动生成了一个0‐100的随机数。"
while :
do
read -p "第 ${input_n} 次尝试。请输入你认为对的数字: " input_v
if [ $input_v -eq $rownum ];then
if [ $input_n -eq 1 ];then
echo "这也太厉害了吧,一次就猜出来了!!!"
elif [ $input_n -eq 2 ];then
echo "你真厉害,第二次就猜中了!!!"
elif [ $input_n -le 4 ];then
echo "运气不错只用了${input_n}次就猜对了!!!"
else
echo "呃 呃 呃 呃 呃 呃 呃 经过${input_n}次尝试,总算猜出来了!!!"
fi
echo "生成的数为 --${rownum}--"
exit
elif [ $input_v -gt $rownum ];then
echo "Sorry,猜大了"
let input_n=${input_n}+1
else
echo "Sorry,猜小了"
let input_n=${input_n}+1
fi
done
结果
**************************************************************************************************************2021年2月11日脚本结束*****************************************************************************************************************
21年2月12日-判断输入值类型脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本获取用户输入的值,依次读取输入字符串每一个位置的元素类型最后组合判断输入的值是什么类型。
文件说明
Judgment_input_value_type.sh:脚本主体文件
脚本主体
[root@135 17_Judgment_value_type]# cat Judgment_input_value_type.sh
#!/bin/bash
# 判断用户输入的数据类型(字母、数字或其他)
#定义控制变量,如果出现某一匹配的类型则对应变量置1
str_n=0
int_n=0
decimal_n=0
other_n=0 #输入一段非汉字的字符串或单个字符。
read -p "请输入一个字符或字符串: " input_v
input_fv=${input_v:-null} #如果啥都没有输入直接退出。
if [ "${input_fv}" == "null" ];then
echo "啥都没有输入,包括空格。"
exit 1
fi str_len=${#input_fv}
#echo "输入字符串长度为${#input_fv} "
for i in `seq 0 $[str_len-1] `
do
#echo "当前位置的字符为${input_v:$i:1}"
str_check=${input_v:$i:1}
case "${str_check}" in
[a-z]|[A-Z])
#echo "字母"
str_n=1
;;
[0-9])
#echo "数字"
int_n=1
;;
".")
#echo "小数点"
decimal_n=1
;;
*)
#echo "其他及特殊字符”
other_n=1
;;
esac
done if [ ${str_n} -eq 1 ] ;then
#判断只要字符串中出现字母则表示为字符串。
echo "入的字符串: ${input_fv} , 类型为普通字符串。"
elif [ ${int_n} -eq 1 ] && [ ${str_n} -eq 0 ] && [ ${other_n} -eq 0 ];then
#判断只要输入中包含数字同时不包含字母和特殊字符则为数字型
if echo "${input_fv}"|grep '^\..*' &>/dev/null;then
echo "输入的字符串: ${input_fv} , 类型为浮点型数字。"
else
echo "输入的字符串: ${input_fv} , 类型为整型数字。"
fi
else
echo "输入的字符串: ${input_fv} , 类型为特殊字符串。" fi
结果
**************************************************************************************************************2021年2月12日脚本结束*****************************************************************************************************************
21年2月13日-操作系统识别脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本通过读取系统中的文件判断本地操作系统厂商及版本号,并输出结果到屏幕上。
文件说明
system_identifier.sh:脚本主体文件
脚本主体
[root@135 18_system_identifier]# cat system_identifier.sh
#!/bin/bash
system_identifier(){
#Manufacturer=`cat /proc/version|grep centos &>/dev/null`
if cat /proc/version|grep -i centos &>/dev/null;then
echo "This system Manufacturer : Centos"
echo -e "Version: `cat /etc/redhat-release | grep -o -E '[6-8].*[0-9]'` \n"
echo -e "Version: `rpm -q centos-release | cut -d- -f3` \n"
elif cat /proc/version|grep -i redhat &>/dev/null;then
echo "This system Manufacturer : Redhat"
echo -e "Version: `cat /etc/redhat-release | grep -o -E '[6-8].*[0-9]'` \n"
elif cat /proc/version|grep -i debian &>/dev/null;then
echo "This system Manufacturer : Debian"
elif cat /proc/version|grep -i Ubuntu &>/dev/null;then
echo "This system Manufacturer : Ubuntu"
elif cat /proc/version|grep -i suse &>/dev/null;then
echo "This system Manufacturer : Suse"
else
echo "This system Manufacturer : unknown"
fi
} main(){
system_identifier
}
main
结果
**************************************************************************************************************2021年2月13日脚本结束*****************************************************************************************************************
21年2月14日-打印日历脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本读取用户输入的日期打印指定日期的日历信息,如果没有输入任何值则打印当前时间的日历。
文件说明
print_calendar.sh:脚本主体文件
脚本主体
#!/bin/bash
#定义打印日历函数
Print_calendar(){
#设置字体颜色
tiffcolor="\033[0;35m"
menucolor="\033[0;33m"
todaycolor="\033[0;35;44m"
start="\033[0m" #获取当前日期信息
now_month=`date +%m`
now_day=`date +%d`
now_year=`date +%Y`
now_start_wek_day=`date -d "$now_year-$now_month-01" +%w`
now_nextmonth=$[now_month+1]
now_nextmonth_year=$[now_year] #从屏幕中获取数据
echo "Please enter the time you want to print the calendar. The default is the current month."
read -p "Format(YYYY-MM-DD): " input_timef input_time=${input_timef:-null}
if [ "${input_time}" == "null" ];then
echo "未输入任何值,默认打印当前月的日历信息."
month=${now_month}
day=${now_day}
year=${now_year}
start_wek_day=${now_start_wek_day}
nextmonth=${now_nextmonth}
else
echo "如果有输入值则把输入值赋给变量"
year=`date -d "${input_time}" +%Y`
month=`date -d "${input_time}" +%m`
day=`date -d "${input_time}" +%d`
start_wek_day=`date -d "${year}-${month}-01" +%w`
echo "测试"
nextmonth=$[month+1]
fi #处理获取到的时间
if [ $nextmonth -eq 13 ];then
nextmonth=1
now_nextmonth_year=$[year+1]
fi #计算本月一共有多少天
diff_day=$[(($(date -d "$now_nextmonth_year-$nextmonth-01" +%s) - $(date -d "$year-$month-01" +%s))/(24*60*60) )]
echo "本月一共有 $diff_day 天." #打印标题
echo -en "${menucolor}"
echo -en "\t $year $month\n"
echo "SUN MON TUE WEN THU FRI SAT"
echo -en "${start}"
#打印空格
if [ $start_wek_day -ne 0 ];then
for((i=1;i<=$start_wek_day;i++))
do
#此处是格式调整,如果结果显示没有特别对齐则调整echo输出的空格数量.
echo -n " "
echo -n " "
done
fi #打印日期
for((i=1;i<=$diff_day;i++))
do
printf "%s" " "
echo -en "${tiffcolor}"
#今天或指定的日期高亮
if [ $day -eq $i ];then
echo -en "${todaycolor}"
fi
printf "%2d" $i
echo -en "${start}"
echo -en " "
if [ $((($start_wek_day+$i)%7)) == 0 ];then
echo ""
fi
done
echo ""
} #定义主函数
main(){
Print_calendar
} #调用主函数
main
#最简单的实现方式是直接调用cal 命令.
#如需要打印某一年的所有日历 命令格式(cal 年份) 例:cal 2021
#如需要打印特定年份的某个月日历 命令格式(cal 月份 年份) 例:cal 12 2021
结果
**************************************************************************************************************2021年2月14日脚本结束*****************************************************************************************************************
21年2月15日-冒泡排序脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
用户输入一组数字,脚本使用冒泡排序法把用户输入的数字按照从小到大的顺序排序。
文件说明
bubble_sort.sh:脚本主体文件
脚本主体
[root@135 20_bubble_sort]# cat bubble_sort.sh
#!/bin/bash
bubble_sort(){
n=0
#循环读取输入字符,如果输入Q/q的话输入完成。
while read -p "Please Input $[n+1] number,input q/Q Key input completed : " arr[$n]
do
#如果输入q或者Q则退出输入。
if [ ${arr[$n]} == "q" ] || [ ${arr[$n]} == "Q" ];then
unset arr[$n]
break
fi
n=$[$n+1]
done len=${#arr[*]} #取数组长度
echo "总长度为: $len"
#循环比对最大的值放置到最后去。
for((i=0;i<len;i++))
do
for((j=0;j<len-i-1;j++))
do
#使用t表示下一个元素的下标
t=$[$j+1]
#判断如果当前的值大于下一个值,循环比对arr[len-i-1]的值是不是最大。
if [[ ${arr[$j]} -gt ${arr[$t]} ]];then
term=${arr[$j]}
arr[$j]=${arr[$t]}
arr[$t]=$term
fi
done
done #输出排序后的元素
for((a=0;a<len;a++))
do
echo ${arr[$a]}
done
} main(){
bubble_sort
} main
结果
**************************************************************************************************************2021年2月15日脚本结束*****************************************************************************************************************
60天shell脚本计划-4/12-渐入佳境的更多相关文章
- 60天shell脚本计划-12/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-10/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-9/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-7/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月26日 --修改时间:2021年3月2日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-6/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-5/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月16日 --修改时间:2021年2月20日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-3/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
随机推荐
- gorm连接mysql和模型定义那些事
1. gorm操作mysql: 1.1 安装gorm gorm官网: https://gorm.io/zh_CN/docs/connecting_to_the_database.html gorm的g ...
- StringBuffer类(增删改查及长度可变原理)
1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBufferDemo { 4 5 public static void ...
- while...break 实例
// 输出1-100内前5个可以被3整除的数 public class Demo { public static void main(String[] args) { int num = 0; for ...
- Java多线程专题4: 锁的实现基础 AQS
合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementi ...
- el表达式中的${param}用法
el表达式中的${param}? 1. 2. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获 ...
- springboot 分布式项目,子级项目各自的作用。
一.分布式项目,需要使用maven搭建. 1.1 父级pro.xml module. <?xml version="1.0" encoding="UTF-8&quo ...
- mysql 相关练习题
/* 自己查询自己 把一张表看成是两张表. 表的设计. SELECT * FROM depart; SELECT d1. NAME '部门', d2. NAME '分部门' FROM depart d ...
- ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新
计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...
- BOM与DOM之DOM操作
目录 一:DOM操作 1.DOM介绍 2.DOM标准规定HTML文档中的每个成分都是一个节点(node): 3.DOM操作需要用关键字 二:查找标签 1.id查找 类查找 标签查找(直接查找) 2.i ...
- 关于增强for循环的使用
1 class MultipleQUestion extends Question{ //多选题类 2 3 private char[] answer; //多选题答案属性 4 5 public ch ...