Linux 16个常用脚本(初级)练习

(1)编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户

#!/bin/bash
# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默
# 认的 123456 作为默认密码。

read -p "请输入用户名:" user


#使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
#没有输入用户名脚本退出后,使用$?查看的返回码为 2

if [ -z $user ]; thenecho " 您不需要输入账户名" exit 2
fi 
#使用 stty ‐echo 关闭 shell 的回显功能
#使用 stty  echo 打开 shell 的回显功能
stty -echo 
read -p "请输入密码:" pass
stty echo 
pass=${pass:-123456}
useradd "$user"
echo "$pass" | passwd --stdin "$user"


(2)使用脚本对输入的三个整数进行排序

#!/bin/bash# 依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字
read -p " 请输入一个整数:" num1
read -p " 请输入一个整数:" num2
read -p " 请输入一个整数:  " num3# 不管谁大谁小,最后都打印 echo "$num1,$num2,$num3"
# num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值
# 如果输入的不是这样的顺序,则改变数的存储顺序,如:可以将 num1 和 num2 的值对调
tmp=0
# 如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值
if [ $num1 -gt $num2 ];thentmp=$num1num1=$num2num2=tmp
fi
# 如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值
if [ $num1 -gt $num3 ];thentmp=$num1num1=$num3num3=$tmp
fi
# 如果 num2 大于 num3,就把 num2 和 num3 对调,确保 num2 变量中存的是最小值
if [ $num2 -gt $num3 ];thentmp=$num2num2=$num3num3=$tmp
fi
echo "排序后数据(从小到大)为:$num1,$num2,$num3"


(3)根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动

#!/bin/bash
# 根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动 

# 00‐12 点为早晨,12‐18 点为下午,18‐24 点为晚上
# 使用 date 命令获取时间后,if 判断时间的区间,确定问候语内容

tm=$(date +%H)
if [ $tm -le 12 ];thenmsg="Good Morning $USER"
elif [ $tm -gt 12 -a $tm -le 18 ];thenmsg="Good Afternoon $USER"
elsemsg="Good Night $USER"
fi
echo "当前时间是:$(date +"%Y‐%m‐%d %H:%M:%S")"
echo -e "\033[34m$msg\033[0m"


(4)将 I lov cls 写入到 txt 文件中

#!/bin/bashcd /home/wenmin/
touch wenxing.txt
echo "I lov cls" >>wenxing.txt


(5)脚本编写 for 循环判断

#!/bin/bashs=0;
for((i=1;i<100;i++))
do s=$[$s+$i]
done echo $sr=0;
a=0;
b=0;
for((x=1;x<9;x++))
do a=$[$a+$x] 
echo $x
done
for((y=1;y<9;y++))
do b=$[$b+$y]
echo $ydoneecho $r=$[$a+$b]


(6)脚本编写 for 循环判断

#!/bin/bashfor i in "$*"
do echo "wenmin xihuan $i"
donefor j in "$@"
do echo "wenmin xihuan $j"
done


(7)脚本 每周 5 使用 tar 命令备份/var/log 下的所有日志文件

#!/bin/bash
# 每周 5 使用 tar 命令备份/var/log 下的所有日志文件

# vim  /root/logbak.sh


# 编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖
# 注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面

tar -czf log-`date +%Y%m%d`.tar.gz /var/log # crontab -e #编写计划任务,执行备份脚本
00 03 * * 5 /home/wenmin/datas/logbak.sh


(8)脚本编写 求和 函数运算 function xx()

#!/bin/bashfunction sum()
{s=0;s=$[$1+$2]echo $s
}
read -p "input your parameter " p1
read -p "input your parameter " p2sum $p1 $p2function multi()
{r=0;r=$[$1/$2]echo $r
}
read -p "input your parameter " x1
read -p "input your parameter " x2multi $x1 $x2v1=1
v2=2
let v3=$v1+$v2
echo $v3


(9)脚本编写 case — esac 分支结构表达式

#!/bin/bash case $1 in 
1) echo "wenmin "
;;
2)echo "wenxing "
;; 
3)  echo "wemchang "
;;
4) echo "yijun"
;;
5)echo "sinian"
;;
6)  echo "sikeng"
;;
7) echo "yanna"
;;
*)echo "danlian"
;; 
esac


(10)# 定义要监控的页面地址,对 tomcat 状态进行重启或维护

#!/bin/sh  
# function:自动监控tomcat进程,挂了就执行重启操作  
# author:huanghong  
# DEFINE  # 获取tomcat PPID  
TomcatID=$(ps -ef |grep tomcat |grep -w 'apache-tomcat-7.0.75'|grep -v 'grep'|awk '{print $2}')  # tomcat_startup  
StartTomcat=/opt/apache-tomcat-7.0.75/bin/startup.sh  #TomcatCache=/usr/apache-tomcat-5.5.23/work  # 定义要监控的页面地址  
WebUrl=http://192.168.254.118:8080/# 日志输出  
GetPageInfo=/dev/null  
TomcatMonitorLog=/tmp/TomcatMonitor.log  Monitor()  {  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  if [ $TomcatID ]then  echo "[info]tomcat进程ID为:$TomcatID."  # 获取返回状态码  TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})  if [ $TomcatServiceCode -eq 200 ];then  echo "[info]返回码为$TomcatServiceCode,tomcat启动成功,页面正常."  else  echo "[error]访问出错,状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"  echo "[error]开始重启tomcat"  kill -9 $TomcatID  # 杀掉原tomcat进程  sleep 3  #rm -rf $TomcatCache # 清理tomcat缓存  $StartTomcat  fi  else  echo "[error]进程不存在!tomcat自动重启..."  echo "[info]$StartTomcat,请稍候......"  #rm -rf $TomcatCache  $StartTomcat  fi  echo "------------------------------"  }  Monitor>>$TomcatMonitorLog


(11)通过位置变量创建 Linux 系统账户及密码

#!/bin/bash

# 通过位置变量创建Linux 系统账户及密码

# $1 是执行脚本的第一个参数,$2  是执行脚本的第二个参数

useradd "$1"
echo "$2" | passwd --stdin "$1"


(12)对变量的传入与获取个数及打印

#!/bin/bash
echo "$0 $1 $2 $3"  // 传入三个参数
echo $#    //获取传入参数的数量
echo $@    //打印获取传入参数
echo $*    //打印获取传入参数


(13)实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

#!/bin/bash

# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员# 提取根分区剩余空间

disk_size=$(df / | awk '/\//{print $4}')# 提取内存剩余空空间
mem_size=$(free | awk '/Mem/{print $4}')
while :
do 
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
thenmail  ‐s  "Warning"  root  <<EOFInsufficient resources,资源不足
EOF
fi
done


(14)检查指定目录下是否存在 对应 文件

#!/bin/bashif [ -f /home/wenmin/datas ]
then 
echo "File exists"
fi


(15)脚本定义while循环语句

#!/bin/bashif [ -f /home/wenmin/datas ]
then 
echo "File exists"
fi[root@rich datas]# cat while.sh 
#!/bin/bashs=0
i=1
while [ $i -le 100 ]
dos=$[$s + $i]i=$[$i + 1]
doneecho $s
echo $i


(16)一键部署 LNMP(RPM 包版本)

#!/bin/bash # 一键部署 LNMP(RPM 包版本)
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
# 本脚本使用于 centos7.2 或 RHEL7.2
yum -y install httpd
yum -y install mariadb mariadb-devel mariadb-server
yum -y install php php-mysqlsystemctl start httpd mariadb
systemctl enable httpd mariadb


(17)读取控制台传入参数

#!/bin/bash
read -t 7 -p "input your name " NAME
echo $NAMEread -t 11 -p "input you age " AGE
echo $AGEread -t 15 -p "input your friend " FRIEND
echo $FRIENDread -t 16 -p "input your love " LOVE
echo $LOVE


(18)脚本实现 复制

#!/bin/bashcp $1 $2


(19)脚本实现文件存在与否的判断

#!/bin/bashif [ -f file.txt ];thenecho "文件存在"
else echo "文件不存在"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL语法分类 DQL(6)分页查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

reloading,一个很实用的Python库!

Python是一门非常流行的编程语言&#xff0c;它的广泛应用和丰富的第三方库使得开发者们能够轻松完成各种任务。reloading是Python中一个强大的库&#xff0c;它能够在程序运行时重新加载修改过的模块&#xff0c;为开发者提供了便利和灵活性。本文将全面介绍reloading库&#…

【STM32 定时器(二)TIM 输入捕获PWM 总结】

STM32定时器之输入捕获总结 OC介绍PWM介绍PWM初始化代码部分开启时钟配置时基单元配置CCR配置GPIO配置复用和重定义功能 开启定时器代码实现 &#xff1a;实现呼吸灯 OC介绍 PWM介绍 PWM参数计算 分辨率越细&#xff0c;分的分量越精细&#xff0c;越稳定&#xff0c;假如它为…

Kafka(十)安全

目录 Kafka安全1 安全协议1.1 PALINTEXT1.2 SSL1.2.1 生成服务端证书1.2.2 生成客户端证书1.2.3 修改配置listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.namesecurity.inter.broker.protocolcontrol.plane.listener.name 1.3 SASL_PLAINT…

面向对象8

面向对象8 main()方法的剖析 public static void main(String args[]){} 1、理解1&#xff1a;看做是一个普通的静态方法 理解2&#xff1a;看做是程序的入口&#xff0c;格式是固定的。 2、与控制台交互 如何从键盘获取数据&#xff1f; 方式1&#xff1a;使用Scanner 方…

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

ELK之使用Filebeat插件收集日志到Logstash

对于Springboot项目接入ELK非常方便&#xff0c;对于非maven&#xff0c;非Spring项目来说就比较复杂&#xff0c;这个时候我们就可以使用Filebeat插件还完成日志的收集发送工作。 Filebeat介绍 Filebeat是用于转发和收集数据的轻量级工具&#xff0c;Filebeat可以监视指定的…

内存泄露与解决

什么是内存泄漏 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在 哪些操作会造成内存泄漏&#xff1f; 1、垃圾回收器定期扫描对象&#xff0c;并计算引用了每个对象的其他对象的数量。如果一个对象的 引用数量为 0&#xff08;没有其他对象引用过该对象&#xff09;&…

通过串口中断的方式进行ASR-01S模块与STM32通信(问题与解决)

前言&#xff1a; 最近在做一个智能家居的项目&#xff0c;需要实现语音控制的功能&#xff0c;于是我选用了ASR-01S模块与STM32通信&#xff0c;这个模块最大的好处在于有配套的编程软件和语音库&#xff0c;不用自己训练且编程简单&#xff08;少儿编程的程度&#xff09;。…

LEETCODE LCS 03. 主题空间

题目描述如上&#xff0c;这个题主要运用了DFS的思想&#xff0c;同时走过的路径标记为6&#xff0c;即可在后续的遍历中过滤掉重复的元素&#xff0c;其他则类似边界条件的判断和题目条件的判断&#xff0c;求最大值&#xff0c;只需要一次遍历中累加对比每一次得即可。 模板&…

数据结构与算法-树-二分搜索树(一)

二分搜索树 今天我们尝试构建一颗二分搜索树&#xff0c;很多同学只有理论&#xff0c;并没有对树有其编码实践。通过一步步的实现一颗二分搜索树&#xff0c;加深对数据结构树的理解。 二分搜索树&#xff0c;又名二分排序树&#xff0c;有人也叫它二分查找树。 特点 二分搜索…

最强AI换脸工具Rope使用教程,Rope整合包下载【全网最全安装步骤】

Rope的汉化整合包&#xff08;包含模型&#xff09;以及下面教程所涉及到的所有安装包我都打包好了&#xff0c;需要的小伙伴可以关注文章底部公众号&#xff0c;回复关键词【rope】获取。 AI换脸软件简介必读 Rope 是一个免费开源的 AI 换脸软件&#xff0c;它具有图形化界面…

Centos启用rc-local服务

Centos启用rc-local服务 简介问题分析解决方法启动并查看状态 简介 大多时候我们可以在/etc/rc.d/rc.local中写一些命令来实现随着服务器的启动(重启)运行自己的程序或服务&#xff0c;但是配置后无法启动&#xff0c;查看了下rc-local.service服务状态显示未启动。 [rootmas…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

如何创建用户流(User Flow):分步指南

原文作者&#xff1a;Camren Browne&#xff0c;CareerFoundry 翻译&#xff1a;数字营销工兵 (sources: 图片来源于网络&#xff09; 用户流(User Flow)是当今用户体验行业中最有用但被误解的工具之一。资深设计师经常避开它们&#xff0c;而初级设计师则很难抓住它们。 事…

炸裂!全球首个AI程序员!

近年来&#xff0c;人工智能&#xff08;AI&#xff09;在多个领域取得了显著进展&#xff0c;不断拓展其能力边界。一个引人注目的突破是全球首个AI程序员——Devin的诞生。 这一创新不仅展示了AI技术的快速进步&#xff0c;而且对软件开发领域和未来的工作场景产生了深远的影…

关于ffmpeg height not divisible by 2的错误

在我们线上视频生产过程中&#xff0c;我们用ffmpeg对视频做了resize&#xff0c;讲原有的分辨率resize到1280p&#xff0c;使用了参数 -vf "scale1280:-1"&#xff0c;作用是将原始视频宽度缩放成1280&#xff0c;-1是指高度等比例缩放。 之前一直运行的好好的&…

网络基础知识-操作系统作用+进程管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 本章知识和计算机…

Twitter代运营服务商哪家好?CloudNEO为您提供全链解决方案

在当今社交媒体盛行的时代&#xff0c;Twitter作为全球最知名的社交平台之一&#xff0c;已成为企业推广品牌、吸引客户和增加曝光的重要渠道。然而&#xff0c;如何有效地利用Twitter进行品牌推广和营销&#xff0c;成为许多企业面临的挑战。在这个背景下&#xff0c;选择一家…

ES6:可迭代对象(Iterable object)

一、概念 可迭代对象是数组的泛化&#xff0c;是定义了内置迭代器方法 Symbol.iterator 的对象。是可以在for..of 循环中使用的对象。 二、迭代器&#xff08;iterator&#xff09; 为了让对象可以迭代&#xff0c;我们需要给对象添加一个迭代器--Symbol.iterator。 迭代器…