学习大数据DAY24 Shell脚本的书写

目录

shell 的变量

系统变量

特殊变量

运算符

if 选择结构 ---then 独立一行

case 语句 等值判断

上机练习 10

附加题

for 循环

while 循环

乘法表(双层嵌套)

上机练习 11

把附加题代码修改为循环形式


shell 的变量

系统变量

$HOME : 当前登录用户的 " 家目录 " 路径
$USER :当前用户名
$RANDOM 可以随机生成 0~32767 之间的整数数字
自定义变量
变量名 = 值;常量: readonly
xm=" 你好 "
echo " 姓名: $xm"
echo ' 姓名: $xm'
readonly p=3.14
n=`cat /etc/passwd | grep -c "root"`
echo $n

特殊变量

1. $n n number $0 代表该脚本名称, $1-$9 代表第一到第九个参数
2. $# 获取所有输入参数的个数,常用于循环;
3. $@ 代表命令行中所有的参数, $@ 会把每个参数区分对待;
4. $? 返回最后一次命令执行的状态,返回 0 代表正确执行,返回非 0 代表执行
不正确。
read 读取终端输入
-p :指定读取值时的提示符;
-t :指定读取值时等待的时间(秒)。
read -p " 请输入密码: " s
read -p " 请输入密码: " -t 10 mima

运算符

赋值运算符 =
算数运算符 + - * / %
比较运算符
字符串比较: == !=
数值比较: -eq 等于 -ne 不等于 -lt 小于 -le 小于等于 -gt 大于 -ge 大于等于
类型权限: -f 存在且是文件 -d 存在且是目录 -r (read) -w (write) -x 执行
(execute)
逻辑运算符 -a -o !
算数运算符
1. $(( 运算式 )) $[ 运算式 ] 2. + , - , *, /, % 加,减,乘,除,取余
echo 3 + 4
n1=3
n2=4
echo $((($n1+$n2*3)/2%2))
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
let c=($a + $b)
echo $c

if 选择结构 ---then 独立一行

if [ 条件判断 ]
then
程序
elif [ 条件判断 ]
then
程序
else
程序
fi

case 语句 等值判断

case $ 变量名 in
"value 1"
如果变量的值等于 value 1 ,则执行程序 1
;;
"value 2"
如果变量的值等于 value 2 ,则执行程序 2
;;
省略其他分支
*
如果变量的值都不是以上的值,则执行此处程序
;;
esac
# if 结构
sex=" "
if [ $sex == " " ]
then
echo " 去做饭 "
elif [ $sex == " " ]
then echo " 去逛街 "
else
echo " 其他 "
fi
# case 结构
sex=" "
case $sex in
" ")
echo "1"
;;
" ")
echo "2"
;;
*)
echo "3"
;;
esac
# 多条件应用
a=3
b=4
c="s"
if [ $a -lt $b -a $c == "s" ]
then
echo "true"
else
echo "false"
fi
# 判断文件是否存在
if [ -f /root/a.txt ]
then
echo " "
cat /root/a.txt
else
echo " 不是 "
fi

上机练习 10

# 1. 编写脚本,将系统日志文件(/var/log/messages),拷贝到/root/文件夹中
# cp /var/log/messages /root/
# 2. 编写脚本,通过位置参数传入学生的姓名和班级,打印“我的名字叫 xx,我
的班级是
# xx 班”# sname="ShiHaiHong"
# class="60"
# echo "我的名字叫${sname},我的班级是${class}班"
# 3. 用 if,写一个 shell 脚本,运行时输入一个数字,如果是 666 则输出 evil,
如果是 777 则
# 输出 lucky, 如果是其他则输出 human。
# read -p "输入一个数字:" number
# if [ $number == 666 ]
# then
# echo "evil"
# elif [ $number -eq 777 ]
# then
# echo "lucky"
# else echo "human"
# fi
# 4. 用 case 方法改写上面的功能。
# read -p "输入一个数字:" number
# case $number in
# "666")
# echo "evil"
# ;;
# "777")
# echo "lucky"
# ;;
# *)
# echo "human"
# ;;
# esac
# 5. 判断/root/hosts 是否是存在并且是普通文件,如果不存在则新建一个,如果
已经存
# 在,则追加写入当前时间到此文件中
# if [ -f /root/hosts.txt ]
# then
# date>>/root/hosts.txt
# else
# touch /root/hosts.txt
# fi
# 6. 判断当前用户是否为 root,如果不是则打印非 root 账号,是的话就执行
ifconfig 查看
# 网卡信息($USER 获取当前用户)
# if [ $USER == "root" ]
# then
# ifconfig
# else# echo $USER
# fi
# 7. 编写脚本判断 mysql 是否正常启动(端口号 3306,查看端口 netstat -nltp,然
后 grep 过
# 滤返回行数,判断行数是否大于 0)
# if [ $(netstat -nltp | grep -c "3306") -gt 0 ]
# then
# echo "mysql 已正常启动"
# else
# echo "mysql 还未开启"
# fi
# 8. 位置参数传递一个绝对路径的文件,添加所有人可执行权限且提示添加执行
权限成
# 功,如果没有传递参数提示没有传递文件,如果传递的文件不存在则先创建再
赋权。
# read -p "填写一个文件" dir
# if [ $# -eq 0 ]
# then
#
echo "没有传递文件"
# fi
# if [ -f $dir ]
# then
#
echo "确实有这个文件,正在赋权"
#
chmod a+x $dir
# else
#
echo "文件不存在,自行创建"
#
touch $dir
#
chmod a+x $dir
# fi
# 9. 首先显示当天日期, 然后查找给定的用户是否在系统中工作(cat
/etc/passwd)。
# 如果在系统中,就输出一条欢迎语句(例如 hello,root!);如果不在系统中,
就
# 输出一条语句(waiting for root!)
# date
# read -p "用户名称:" suser
# if [ $(cat /etc/passwd | grep "$suser" | wc -l) -gt 0 ]
# then
# echo "hello,root!"
# else
# echo "waiting for root!"
# fi
# 10. 接受一个参数,若给定参数不是目录, 则给出提示信息;# 否则使用 ls -l 命令列出该目录下的内容,并输出有多少个子目录(d 开头),
多少
# 个普通文件(-开头)。显示示例如下:
# 目录的数量:16
# 文件的数量:25
# read -p "输入参数" dir
# if [ -d $dir ]
# then
# ls -l $dir
# echo "目录的数量:$(ls -l $dir|grep -c "^d")"
# echo "文件的数量:$(ls -l $dir|grep -c "^-")"
# else
# echo "这不是目录"
# fi

附加题

#制作一个猜拳游戏
# read -p "请出拳(石头,剪刀,布):" hand
# if [ $hand == "石头" -o $hand == "剪刀" -o $hand == "布" ]
# then
# echo "玩家:$hand"
# echo -n "电脑:"
#
if [ $RANDOM -ge 0 -a $RANDOM -le 11000 ]
#
then
#
computer="剪刀"
#
elif [ $RANDOM -ge 11001 -a $RANDOM -le 22000 ]
#
then
#
computer="石头"
#
elif [ $RANDOM -ge 22001 -a $RANDOM -le 32767 ]
#
then
#
computer="布"
#
fi
#
echo $computer
#
if [ $computer == $hand ]
#
then
#
echo "平局"
#
elif [ $computer == "剪刀" -a $hand == "布" -o $computer == "石头" -a $hand
== "剪刀" -o $computer == "布" -a $hand == "石头" ]
#
then
#
echo "电脑赢"
#
elif [ $computer == "布" -a $hand == "剪刀" -o $computer == "剪刀" -a $hand
== "石头" -o $computer == "石头" -a $hand == "布" ]
#
then
#
echo "玩家赢"#
fi
# else
#
echo "不要作弊"
# fi

for 循环

for i in 集合
# 序列
for i in `seq 1 5`
do
echo $i
done
# 位置参数
for i in $@
do
echo $i
done
# 字符串
s="a b c dd e"
for i in $s
do
echo $i
done
# 命令结果
s=`ls /root` echo $s
echo $s
for i in $s
do
echo $i
done

while 循环

while [ 条件判断 ]
i=1
while [ $i -le 10 ]
do
echo $i
i=$(($i+1))
done
# 不确定循环次数
read -p " 及格了吗?( y/n ): " answer
while [ $answer == "n" ]
do echo " 学习做作业考试 "
read -p " 及格了吗?( y/n ): " answer
done
echo " 终于及格了 "

乘法表(双层嵌套)

for i in `seq 1 9`
do
for j in `seq 1 $i`
do
echo -n " $j * $i = $(($i * $j)) "
done
echo ""
done
循环控制
break 等同 plsql exit
continue

上机练习 11

# 1.鸡兔同笼(同前面 PLSQL 的题目,DAY13)
# for chicken in `seq 0 35`
# do
#
rabbit=$((35 - $chicken))
#
if [ $(($rabbit*4 + $chicken*2)) -eq 94 ]
#
then
#
echo "共有${chicken}只鸡,${rabbit}只兔"
#
fi
# done
# 2.猴子吃桃(同前面 PLSQL 的题目,DAY13)
# pea=1
# for day in `seq 1 10`
# do
#
pea=$((2 * ($pea+1)))
# done
# echo "有${pea}个桃子"
# 3.创建用户组 wanmei,批量建立用户 wm1 到 wm9,用户属于 wanmei 组,创建完
成查
# 看/etc/group 和 /etc/passwd 文件
##groupadd wanmei
# for i in `seq 1 9`
# do
#
useradd -g wanmei "wm$i"
# done#终端查看
#cat /etc/group
#cat /etc/passwd
# 4.删除上面的用户和用户组
# for i in `seq 1 9`
# do
#
userdel "wm$i"
# done
# groupdel wanmei
# 5.实现传入一个目录作为参数,如果传入的不是目录则提示不是目录,如果是
目录则将
# 该目录下所有的普通文件的文件名都罗列出来
# if [ -d $1 ]
# then
# ls -l $1 | grep "^-"
# else
# echo "不是目录"
# fi
# 方法二
# if [ -d $1 ]
# then
#
for i in `ls $1`
#
do
#
if [ -f "$1/$i" ]
#
then
#
echo $i
#
fi
#
done
# else
# echo "不是目录"
# fi
# 6.猜数字游戏:电脑随机产生一个 100 以内的数字(1-99),通过每次键盘输
入来猜数
# 字,输入的小了就提示往大猜,输入大了就提示往小里猜, 直到输入正确数
字(通过
# $RANDOM 获取随机数)
# ComputerNumber=$(($RANDOM % 99 + 1))
# read -p "猜猜看呐" no
# if [ $no -ge 1 -a $no -le 99 ]
# then
#
while [ $no != $ComputerNumber ]
#
do
#
if [ $no -lt $ComputerNumber ]#
then
#
read -p "猜小了,再试一遍吧" no
#
elif [ $no -gt $ComputerNumber ]
#
then
#
read -p "猜大了,再试一遍吧" no
#
elif [ $no -gt 99 -o $no -lt 1 ]
#
then
#
read -p "数字不在范围内啊!" no
#
fi
#
done
#
echo "你终于答对了,恭喜!"
# else
#
echo "不是数字或数字过大!"
# fi
# 7.查看 100 到 200 以内素数并统计素数的个数
# count=0
# for i in `seq 100 200`
# do
#
flag=true
#
for j in `seq 2 $(($i-1))`
#
do
#
if [ $(($i%$j)) -eq 0 ]
#
then
#
flag=false
#
break
#
fi
#
done
#
if [ $flag == true ]
#
then
#
echo $i
#
count=$(($count+1))
#
fi
# done
# echo "有${count}个素数"

把附加题代码修改为循环形式

# read -p "来玩猜拳吗?(y/n)" wan
# while [ $wan == 'y' ]
# do
# read -p "请出拳(石头,剪刀,布,我不玩了):" hand
# if [ $hand == "我不玩了" ]
# then
#
break
# elif [ $hand == "石头" -o $hand == "剪刀" -o $hand == "布" ]# then
# echo "玩家:$hand"
# echo -n "电脑:"
#
if [ $RANDOM -ge 0 -a $RANDOM -le 11000 ]
#
then
#
computer="剪刀"
#
elif [ $RANDOM -ge 11001 -a $RANDOM -le 22000 ]
#
then
#
computer="石头"
#
elif [ $RANDOM -ge 22001 -a $RANDOM -le 32767 ]
#
then
#
computer="布"
#
fi
#
echo $computer
#
if [ $computer == $hand ]
#
then
#
echo "平局"
#
elif [ $computer == "剪刀" -a $hand == "布" -o $computer == "石头" -a $hand
== "剪刀" -o $computer == "布" -a $hand == "石头" ]
#
then
#
echo "电脑赢"
#
elif [ $computer == "布" -a $hand == "剪刀" -o $computer == "剪刀" -a $hand
== "石头" -o $computer == "石头" -a $hand == "布" ]
#
then
#
echo "玩家赢"
#
fi
# else
#
echo "不要作弊"
# fi
# done
# echo "下次再会~"

需要使用代码请自行消去注释。(ctrl+/)

吐槽一下,这个 shell 脚本语法规则真的古怪,琢磨死人了!!!

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

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

相关文章

套接字选项、广播和组播

1. 套接字选项(socket options) 每一个套接字(socket)在不同的协议层次(级别)上面有不同的行为属性(选项) 我们可以设置 / 获取指定的套接字选项 getsockopt:获取套接字的选项 setsockopt:设置套接字的选项 NAMEgetsockopt, setsockopt - get and set op…

python自动化运维 通过paramiko库和time库实现服务器自动化管理

目录 一.前言 二. 代码实现以及解析 2.1导入必要的库 2.2定义服务器信息 2.3创建 SSH 客户端连接函数 2.4执行远程命令函数 2.5获取系统信息函数 2.6重启服务函数 2.7 主函数 三.致谢 一.前言 在数字化时代,IT 基础设施的规模和复杂性不断增长&am…

Hadoop集群安装配置

文章目录 Hadoop部署配置集群配置历史服务器配置日志的聚集分发Hadoop群起集群Hadoop群起脚本 准备工作:需要3台虚拟机,每台虚拟机搭建好JDK并配置环境变量 Hadoop部署 1)集群部署规划 注意:NameNode和SecondaryNameNode不要安…

批处理操作系统、分时操作系统、实时操作系统

批处理操作系统: 特点:批处理操作系统主要用于处理一系列作业。作业是把程序、数据连同作业说明书组织起来的任务单位,这些作业被组织成批作业。系统将这些作业按顺序执行,用户在提交作业后通常不需要等待作业完成,而是…

Hadoop NameNode 进入 Safe Mode 的问题分析与解决方案

随着大数据技术的不断发展,Hadoop 已经成为了处理海量数据不可或缺的一部分。然而,在使用 Hadoop 的过程中,我们经常会遇到 NameNode 进入 Safe Mode 的情况,这可能会导致集群暂时无法进行数据写入操作。本文将详细介绍 NameNode …

Java OpenCV 图像处理40 图形图像 图片裁切ROI

Java OpenCV 图像处理40 图形图像 图片裁切 在 OpenCV 中,Rect 类是用来表示矩形的数据结构,通常用于定义图像处理中的感兴趣区域(Region of Interest,ROI),或者指定图像中的某个区域的位置和大小。Rect 类…

使用Apache SeaTunnel进行二次开发的实践分享

大家好,我是范佳,是Apache SeaTunnel社区的PMC member。今天给大家分享一些基于Apache SeaTunnel二次开发的内容。 这部分内容主要涉及代码层面的知识,如果大家有什么疑问,欢迎来社区找我交流! 引言 大部分数据开发工…

如何使用 API list 极狐GitLab 容器镜像仓库中的 tag?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

【Pytorch实战教程】内存泄漏以及Pytorch中内存泄露的注意事项

文章目录 内存泄漏的原因内存泄漏的影响在不同编程语言中的内存泄漏在PyTorch中的内存泄漏示例总结内存泄漏是指在计算机 程序运行过程中, 动态分配的 内存由于某些原因 没有被释放或回收,导致这些内存块 无法再被使用或重新分配。 内存泄漏会导致程序占用越来越多的内存…

【微信小程序实战教程】之微信小程序 WXML 语法详解

WXML语法基础 从本章开始,我们就正式进入到了小程序项目开发学习的初级阶段,本章将介绍小程序的界面构成。有过网页开发学习经历的同学都知道,网页开发所使用的技术是HTML、CSS和JS,其中HTML用于描述整个网页的结构,也…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显,HTTPS(超文本传输安全协议)已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本,通过SSL协议加密数据传输,不仅能保护用户数据的安全,还能提升搜索引擎排名&#xff…

已经安装了pycryptodome,但是导入的时候始终报错:ModuleNotFoundError: No module named “Crypto”

嗨,我是兰若,如果你在安装pycryptodome时,始终安装不上,那么你一定要看这篇文章,大部分的小伙伴是已经安装了 pycryptodome,但仍然无法导入,可能有几个原因。以下是一些常见的解决方案&#xff…

重塑互联网生态:探索Web 3.0、大数据与隐私保护的新篇章

引言:互联网的新纪元 随着互联网技术的日新月异,我们正迈入一个全新的时代,其中Web 3.0、大数据以及隐私保护成为塑造未来互联网生态的三大核心力量。它们不仅改变了我们与互联网交互的方式,更深刻地影响着社会的方方面面。 Web…

linux之shell脚本实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

docker 构建 mongodb

最近需要在虚拟机上构建搭建mongo的docker容器,搞了半天老有错,归其原因,是因为现在最新的mango镜像的启动方式发生了变化,故此现在好多帖子,就是错的。 ok,话不多说: # 拉取最新镜像&#xf…

华为云依赖引入错误

问题:记录一次项目加在华为云依赖错误,如下: 错误信息:Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…

蓝牙网关厂家推荐:北京桂花网科技有限公司

在物联网技术日新月异的今天,蓝牙网关作为连接蓝牙设备与物联网系统的关键桥梁,其重要性日益凸显。在众多蓝牙网关厂家中,北京桂花网科技有限公司(Cassia Networks)以其卓越的技术实力、丰富的产品线和广泛的应用场景&…

【CentOS】CentOS系统硬件信息获取脚本

CentOS系统硬件信息获取脚本 在日常的 CentOS 系统管理中,我们经常需要获取系统的硬件信息,如 CPU 核心数、内存大小、硬盘容量和操作系统版本等。本文将介绍一个简单的 Bash 脚本,通过调用系统命令来获取这些信息,并格式化输出&…

Minos 多主机分布式 docker-compose 集群部署

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com) Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能 中文地址:MinIO | 用于AI的S3 & Kubernetes原生对象存储 官网地址&#xf…