shell case语句及函数

2023-11-09

case 菜单选择打印
语法:
case var in     var变量
    patten 1)   匹配模式1 a|b|c  |和or类似
    command...  需要执行的命令
    ;;      命令执行完毕
    patten 2)
    command...
    ;;
    *)      默认值,没有匹配的模式
    command...  
    ;;
esac            代表case语句的结束

demo1:当给程序输入start|s时,显示service is running!;stop——>service is stoped;...
#!/bin/bash
#read -p "请输入参数:" var
case $1 in
    start|s)
    echo service is running
    ;;
    stop)
    echo service is stoped
    ;;
    reload)
    echo service is reload
    ;;
    *)
    echo xxxxx
    ;;
esac

demo2:相互嵌套
#!/bin/bash
read -p "小明,你喜欢我吗?(喜欢|不喜欢|爱你):" love
case $love in
    喜欢)
    echo "我也喜欢你"
    ;;
    不喜欢)
    read -p "那你喜欢谁?" who
    case $who in
        小红)
        echo "她是我的闺蜜"
        ;;
        小彭)
        echo "额..拜拜"
        ;;
        *)
        echo "我们不合适"
        ;;
    esac
    ;;
    *)
    echo "你到底什么意思?"
    ;;
esac

demo3:维护菜单选择
#!/bin/bash
echo "*********welcome to uplooking*********"
echo "*********选择操作类型*******************"
echo "**********1——系统**********************"
echo "**********2——程序**********************"
echo "**********3——数据库********************"
echo "**********0——退出**********************"
read -p "请选择操作类型:" choose
case $choose in
    1)
    echo "你选择的类型是系统维护"
    ;;
    2)
    echo "你选择的是程序"
    ;;
    3)
    echo "*********welcome to uplooking*********"
    echo "*********选择操作类型*******************"
    echo "**********1——备份**********************"
    echo "**********2——数据导入导出****************"
    echo "**********0——退出**********************"
    read -p "请你输入对数据库的操作:" choose1
    case $choose1 in
        0)
        echo "退出"
        ;;
        1)
        echo "备份数据库"
        ;;
        2)
        echo "导入导出"
        ;;
        *)
        echo "你要干啥?"
        ;;
    esac
    ;;
    0)
    exit
    ;;
esac

课堂练习:
1、输入一个等级(A—E),查看每个等级的成绩;如输入A,则显示"90分~100分";依次类推

2、模拟一个2人相亲的场景,交互式输入名字、性别、年龄(年龄放在性别判断后)
1>对性别进行判断,如果不输入男或者女,则显示“你是泰国来的码?”如果是男的则对年龄判断:
2>男的年龄大于18岁则显示“某某先生,你结婚了码?”;如果对方回答yes或者结了,则显示“那你来着凑什么热闹?”;如果对方回答no或者没结,则再次询问“那你有房有车吗?”;如果既不说结了也不说没结,则显示“你到底有没有结婚??”
3>问有房有车吗,对方回答有,则显示“咱们去民政局领证吧,正好今天是七夕!”;如果对放回答没有,则显示“不好意思,我去下洗手间...”;如果即不回答有也不回答没有,则显示“请正面回答我的问题??”
4>男的年龄如果小于18岁,则显示“你个小猫孩来着干啥,不好好读书”
5>如果是女的,并且年龄大于18岁,则显示“某某女士,您好”;否则显示“某某小姐,您好”


函数:
语法结构:
方法1:
function function_name(){
    command...
}
方法2function_name(){
command...
}

return:作用
1、用来返回一个值给函数,主函数可以调用该返回值 0256  return 2
2、用来结束函数

demo1:
#!/bin/bash
function hello(){
    echo hello
    echo $1
}

world(){
    echo hi
    echo $1
}

函数调用:
1、直接在终端调用
# source fun1.sh 
[root@node1 shell03]# hello uplooking
hello
uplooking
[root@node1 shell03]# world 888
hi
888
2、写到全局的环境变量文件里
vim /etc/profile
...
function hello(){
    echo hello
    echo $1
}

world(){
    echo hi
    echo $1
}

3、脚本里调用
#!/bin/bash
function hello(){
    echo hello
    echo $1
}
#read -p "请输入参数:" var
case $1 in
    start|s)
    hello uplooking
    echo service is running
    ;;
    stop)
    hello 66666;
    echo service is stoped
    ;;
    reload)
    echo service is reload
    ;;
    *)
    hello 7777;echo xxxxx
    ;;
esac

demo:批量创建3个用户user1~user3;用户的附加组为admin组;密码为123
#!/bin/bash
g=admin
groups(){
groupadd $g
}

users(){
    for i in {1..3}
    do
    useradd -G $g user$i
    echo 123|passwd --stdin user$i
    done
}

grep -w admin /etc/group &>/dev/null
if [ $? -ne 0 ];then
 groups
 users
else
 users
fi





作业:
写脚本自动搭建web服务,要求如下:
1、基于域名的虚拟主机(DNS可以用脚本也可以写到hosts文件中即可)
2、访问www.myweb.com——>this is myweb test page
3、web服务器的ip和主机名交互式的从外部输入,并且如果不输入一致提示输入
提示:
在脚本中可以先写一个函数,目的是如果不输入相应的内容则一致提示输入
4、搭建完后要显示测试是否成功
5、根据自己的想法可以是该脚本更丰富

预习:sed





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell case语句及函数 的相关文章

  • Bash:递归复制命名文件,保留文件夹结构

    我希望 cp R src prog js images icon jpg tmp package 将在目标目录中产生对称结构 tmp package src prog js images icon jpg 但相反 这两个文件都被复制到 tm
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 如何从 LaTeX 执行 shell 脚本?

    我正在尝试在 LaTeX 中执行以下操作 documentclass article begin document execute usr local bin my shell script sh end document 想法是执行 us
  • 如何正确使用fork、exec、wait

    我正在编写的 shell 需要执行用户提供给它的程序 这是我的程序的非常简短的简化版本 int main pid t pid getpid this is the parents pid char user input NULL size
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 如何扩展路径中的波形符(~)[重复]

    这个问题在这里已经有答案了 我有一个 shell 脚本 可以从用户那里获取目录路径 但我需要检查目录是否为空 如果用户将他的主路径与 而不是绝对路径 所以我无法检查它ls echo Specify your project root dir
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 如何使用 UNIX shell 脚本删除平面文件的页眉和页脚记录?

    我有一个平面文件 如下所示 如何使用 UNIX shell 脚本从文件中删除页眉和页脚并重写同一文件 9 20050427 HEADER RECORD 0000000 00000 000000000 123456 00 654321 DAT
  • 如何检查目录是否有读/写权限

    我有一个如图所示的目录 d wx x x 2 bcheudev bcheudev 4096 Jun 18 06 16 test 这表明该目录没有读取权限 但是当我通过 shell 脚本检查相同内容时 它给出的结果是 dir test 具有读
  • 如何在 grep 中每个文件匹配一次?

    是否有任何 grep 选项可以让我控制匹配总数 但在每个文件的第一个匹配处停止 Example 如果我这样做grep ri include coffee re 我明白了 app coffee express require express
  • 如何使用 HP-UX shell 脚本将简单的文本文件作为附件发送?

    我需要在 HP UX 中使用 shell 脚本发送一封带有文本文件作为附件的电子邮件 我没有安装mutt 我正在使用以下命令 但它在电子邮件正文中发送文件内容 我希望将其作为附件 mailx s Report email protected
  • npx:shell-auto-fallback 参数已被删除

    老实说 我不记得我最后在我的机器上安装了什么 我相信它正在酝酿 gatsby cli 无论如何 从昨天早上开始 当我打开新实例或重置终端 打开新选项卡 源 zshrc 等 时 我的终端一直给出以下错误 Last login Tue Nov
  • 运行 shell 命令从 Android 应用程序复制文件

    我正在尝试启动一个应用程序 以便将我的应用程序备份到 SD 卡 我跑 Process p Runtime getRuntime exec su Process c Runtime getRuntime exec cp data app co
  • $@ 中 args 的 bash 参数大小写

    我有一个带有一长串可选参数的脚本 有些具有相关的值 Such as script first 2012 12 25 last 2012 12 26 copy remove script first 2012 12 25 因此有以下案例陈述
  • c - 后台运行的程序的退出状态

    我有一个任务 其中我必须创建一个迷你 shell 它能够执行很多操作 包括作业控制 我设法使用 fork 和 execvp 创建新的工作 但我还想获取 execvp 运行的程序的退出代码 根据我从其他帖子中查找到的内容 我可以使用以下方法来
  • 过滤 stderr 并获取初始返回代码

    在 shell 脚本中 我必须运行一个命令 我需要确定返回码是什么 但事实证明该命令的输出会发送到 stderr 并且还会输出用户的密码 不幸的是 这是命令的一个参数 不好 我知道 我至少想过滤掉密码 使其不被显示回来 cmd OPTION
  • Sql查询增加多个项目的项目价值价格

    我想编写 Sql 查询来按百分比增加商品价格 场景是 在表中 我有 3 列 ID 商品名称 价格 Example If item Name is T shirt Increase price by 10 item Name is Jins
  • 运行“read PATH”后出现“ls:未找到”

    我正在尝试编写一个小脚本来列出给定变量中的目录 然而我却跑不了ls在读取我对变量的输入之后PATH system bin sh echo enter directory for listing read PATH ls PATH R gt
  • 将 shell 转义的参数字符串传递给 Bourne shell 中的子命令

    假设我有一个要运行的命令 cmd 和一个包含我想要传递给函数的参数的变量 类似于 foo bar baz qux 就像这样 bin sh command cmd args foo bar baz qux 参数包含引号 如上所示 将包含空格的

随机推荐

  • Windows系统中,如何用cmd命令终止端口的运行

    在Windows操作系统中 我们在启动一个tomcat服务器时 经常会发现8080端口已经被占用的错误 而我们又不知道如何停止这个tomcat服务器 本文将通过命令来强行终止这个已经运行的tomcat进程如下 1 首先查找到占用8080端口
  • 浮点类型四则运算

    eval用于把字符串转化为数值 int是转化为整数 float是转化为小数 试编程实现分两行输入两个非零浮点数 并在4 行中按顺序输出两个数的加 减 乘 除的计算式和计算结果 计算结果str format 方法保留小数点后3位数字 要求输出
  • 【已解决】span插入button插槽中想要点击不生效

    span插入button插槽中 发现点击span文字也回弹出button的事件 解决方案 click stop span test span
  • TX2入门(9)——yolov3(1)

    1 从github上clone git clone https github com pjreddie darknetcd darknet 2 修改Makefile 以下注释来自参考链接1 GPU 1 是否需要用GPU CUDNN 1 是否
  • Docker按装ElasticSearch

    1 检查自己的虚拟机是否安装了Docker环境 2 拉去镜像 依次执行下面两个命令 拉取两个相关镜像 存储和检索数据 docker pull elasticsearch 7 4 2 可视化检索数据 docker pull kibana 7
  • 如何使用 Python Selenium 自动购买 Interpark 演唱会门票?

    前言 Interpark是韩国的一家知名网上购物网站 成立于1996年 它是韩国最早开展网上零售业务的公司之一 提供各种产品 包括各种书籍 电子产品 珠宝 户外用品 食品和服装等等 Interpark还提供机票 旅游和酒店等服务 它已经成为
  • 什么是Redis持久化

    Redis持久化简单概括为两点 RDB Redis DataBase AOF Append Only File 下面解释这两点 RDB相关知识 RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘 也就是行话将的Snapshot快照 它恢
  • 使用 ArrayList 应当避免的坑

    大家都知道 ArrayList 是由数组实现 而数据的长度有限 需要在合适的时机对数组扩容 当我们初始化一个长度为 2 的 ArrayList 并往里边写入三条数据时 ArrayList 就得扩容了 也就是将之前的数据复制一份到新的数组长度
  • clion的学习资料

    1 官方指南 https www jetbrains com help clion meet clion html 2 下面是一些快捷键的例子 快捷键配置 File gt Setting gt Keymap gt Keymaps 选择Vis
  • 一文读懂USB Type-C接口 <一>:引脚和功能指南

    本文将介绍USB Type C标准的一些最重要的特性 你知道如何使用USB Type C接口吗 本文列出了USB Type C引脚的解剖结构 并简要介绍了其各种模式 USB Type C是一种USB连接器系统的规范 它在智能手机和移动设备中
  • 基于单片机的蔬菜大棚温湿度智能控制系统设计

    基于单片机的蔬菜大棚温湿度智能控制系统设计 目 录 基于单片机的蔬菜大棚温湿度智能控制系统设计 1 设计背景 2 设计方案 2 1 设计目的 2 2 设计思路 2 3 系统整体设计思路 2 4 设计要求 3 功能模块设计 3 1 主控模块
  • zynq audio pcm DMA

    本篇接着上一篇 概述pcm调用DMA操作流程 接着ynq alsa说起 181 static int axi i2s probe struct platform device pdev 182 183 struct resource res
  • 浅谈【Stable-Diffusion WEBUI】(AI绘图)的基础和使用

    文章目录 零 AI绘图 一 简单介绍 1 1 Stable Diffusion 1 2 Stable Diffusion WEB UI 1 3 SD WebUI启动器和整合包 二 使用 2 1 启动 控制台 WEBUI 2 2 模型 2 2
  • How to change SSH port on Centos 6, 7, and 8.

    In this tutorial we will go through the steps on how to change the SSH port on Centos 6 7 and 8 Download PDF Posted 23 S
  • 解决vue白屏问题

    咱们先看看vue白屏在ios手机上是如何产生的 首页跳转到到第二屏 再从二级页面返回到首页就会出现白屏情况 解决思路 既然是首页白屏那么就要从首页开始解决问题 经过多次比对发现 返回到首页后 出现白屏 然后咱们用手触摸或则向下滑动 白屏就没
  • opencv编写均值滤波_opencv3.2.0图像处理之均值滤波blur API函数

    均值滤波 blur函数 函数原型 void blur InputArray src OutArray dst Size ksize Point anchor point int borderType BORDER DEFAULT 参数详解同
  • 仿叮咚买菜开源代码

    1 预览 1 前台 http dingdong nodebook top github地址 https github com cgq001 dingdong 2 后台管理 http dingdong admin nodebook top g
  • Python 中的列表推导式

    Python 中的列表推导式 简单用法 添加多个条件 多个列表使用 替换 Reduce 和 Lambda 嵌套列表推导式 列表推导式是一种 Python 构造 可减少生成新列表或过滤现有列表所需的代码行 列表推导式包含在方括号内 它由一个表
  • 12306查询车票信息返回的数据解析

    例如普通k 返回的车次信息 26000K772633 K7727 HDP QTP BXP TJP 00 42 02 33 01 51 Y UqBhHc2N4C1b00y5vYeRuG025cKMjh0sxUwHbuwDNWuOXRhule
  • shell case语句及函数

    case 菜单选择打印 语法 case var in var变量 patten 1 匹配模式1 a b c 和or类似 command 需要执行的命令 命令执行完毕 patten 2 command 默认值 没有匹配的模式 command