大数据之Shell基础

2023-10-30

目录

1.shell概述

2.shell脚本入门

2.1 shell 解析器

2.2 脚本格式

3.shell中的变量

3.1 系统变量

3.2 自定义变量

4.运算符

4.1基本语法

4.2 案例实操:

5.条件判断

5.1 基本语法

5.2 常用判断条件

6.流程控制

6.1 if判断

6.1.1 基本语法

 6.1.2 案例实操

6.2 case语句

6.2.1 基本语法

6.2.2 案例实操

6.3 for循环

6.3.1 基本语法

6.3.2 案例实操

6.4 while循环


1.shell概述

shell是一种解释型语言,是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。用于操作系统内核和应用程序的交互,具有易编写、易调试、灵活性强的优点。

2.shell脚本入门

2.1 shell 解析器

Linux中提供一下shell解析器,其中常用的是sh以及bash解析器。Cenos默认的解析器是bash

[yangmin@hadoop102 shelltest]$  cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

2.2 脚本格式

脚本以 #!/bin/bash开头(指定解析器)

3.shell中的变量

3.1 系统变量

常用系统变量:$HOME $PWD $SHELL $USER $JAVAHOME等

3.2 自定义变量

基本语法

(1)定义变量:变量=值

(2)撤销变量:unset 变量

(3)声明静态变量:readonly变量,注意:不能unset

定义变量规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写

(2)等号两侧不能有空格

(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

(4)变量的值如果有空格,需要使用双引号或单引号括起来。

4.运算符

4.1基本语法

(1)“$((运算式))”或“$[运算式]”

(2)expr  + , - , \*,  /,  %    加,减,乘,除,取余

注意:expr运算符间要有空格

4.2 案例实操:

(1)计算3+2的值

[atguigu@hadoop101 datas]$ expr 2 + 3

5

(2)计算3-2的值

[atguigu@hadoop101 datas]$ expr 3 - 2

1

(3)计算(2+3)X4的值

采用一步完成expr

[atguigu@hadoop101 datas]$ expr `expr 2 + 3` \* 4

20

采用[]形式

[atguigu@hadoop101 datas]# S=$[(2+3)*4]

[atguigu@hadoop101 datas]# echo $S

5.条件判断

5.1 基本语法

[ condition ](注意condition前后要有空格

注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。

5.2 常用判断条件

(1)两个整数之间比较

= 字符串比较

-lt 小于(less than)                  -le 小于等于(less equal)

-eq 等于(equal)                     -gt 大于(greater than)

-ge 大于等于(greater equal)   -ne 不等于(Not equal)

(2)按照文件权限进行判断

-r 有读的权限(read)              -w 有写的权限(write)

-x 有执行的权限(execute)

(3)按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence)          -d 文件存在并是一个目录(directory)

6.流程控制

6.1 if判断

6.1.1 基本语法

 6.1.2 案例实操

输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。

#!/bin/bash


if [ $1 -eq "1" ]
then
        echo "bangzhang zhen shuai"
elif [ $1 -eq "2" ]
then
        echo "xiaopang zhen shuai"
fi

6.2 case语句

6.2.1 基本语法

注意事项:

  1. case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
  2. 双分号“;;”表示命令序列结束,相当于java中的break。
  3. 最后的“*)”表示默认模式,相当于java中的default。

6.2.2 案例实操

输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。

#!/bin/bash


case $1 in
"1")
        echo "xiaomin"
;;

"2")
        echo "xiaopang"
;;

*)
        echo "xiaomeimei"
;;
esac

6.3 for循环

6.3.1 基本语法

 

6.3.2 案例实操

从1加到100

#!/bin/bash

s=0
for ((i=0;i<=100;i++))
do
        s=$[$i+$s]
done
echo $s
~                                                                                                                                                                                     
~                                                                                                                                                                                  

6.4 while循环

6.4.1 基本语法

6.4.2 案例实操

从1加到100


#!/bin/bash

s=0
i=0
while [ $i -le 100 ]
do
   s=$[$i+$s]
   i=$[$i+1]
done
echo $s

j=0
while [ $j -le 10 ]
do
        echo "I love xiaopang"
        j=$[$j+1]
done

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

大数据之Shell基础 的相关文章

  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 通过 sed 使用 unix 变量将数据附加到每行末尾[重复]

    这个问题在这里已经有答案了 我有一个文件 我想使用 SED 将值附加到每行末尾的 unix 变量中 我已经通过 AWK 实现了这一点 但我想在 SED 中实现 像这样的东西 我已经尝试过以下命令 但它不起作用 sed i s BATCH R
  • Pig 10.0 - 将元组分组并在 foreach 中合并包

    我在用着Pig 10 0 我想在 foreach 中合并包 假设我有以下内容visitors alias a b 1 2 3 4 a d 1 3 6 a e 7 z b 1 2 3 我想对第一个字段上的元组进行分组 并将包与一组语义合并以获
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • PyQt5 - 无法使用 QVideoWidget 播放视频

    from PyQt5 QtWidgets import from PyQt5 QtMultimedia import from PyQt5 QtMultimediaWidgets import from PyQt5 QtCore impor
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • Hadoop 推测任务执行

    在Google的MapReduce论文中 他们有一个备份任务 我认为这与Hadoop中的推测任务是一样的 推测任务是如何实现的 当我启动一项推测任务时 该任务是从一开始就作为较旧且缓慢的任务开始 还是从较旧的任务到达的位置开始 如果是这样
  • Python 脚本作为 Linux 服务/守护进程

    Hallo 我试图让 python 脚本作为服务 守护进程 在 ubuntu linux 上运行 网络上存在多种解决方案 例如 http pypi python org pypi python daemon http pypi python
  • Spark 写入 hdfs 无法使用 saveAsNewAPIHadoopFile 方法

    我在 CDH 5 2 0 上使用 Spark 1 1 0 并试图确保我可以读取和写入 hdfs 我很快意识到 textFile 和 saveAsTextFile 调用旧的 api 并且似乎与我们的 hdfs 版本不兼容 def testHD
  • bash循环跳过注释行

    我正在循环文件中的行 我只需要跳过以 开头的行 我怎么做 bin sh while read line do if line doesn t start with then echo line fi done lt tmp myfile 谢
  • 限制 Imagemagick 使用的空间和内存

    我在 Rails 应用程序上使用 Imagemagick 使用 rmagick 但我的服务器 Ubuntu 不是很大 当我启动转换进程时 Imagemagick 占据了我的服务器 30GB HDD 的所有位置 内存 我想限制内存和 tmp
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • Apache hadoop 版本 2.0 与 0.23

    Hadoop 的版本和发行版太多 让我很困惑 我有几个问题 Apache Hadoop 1 x 是从 0 20 205 开始的 Apache Hadoop 2 0 是从 0 22 还是 0 23 开始 根据这个blogpost http b
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • python-报错

    报错 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行 通常是输入 C Exception 常规错误的基类 StopIteration 迭代器
  • JS 统计字符

    var str id content value replace r n g n var length t str length
  • 使用Koa2进行Web开发(一)

    这篇文章是我正在进行写作的 新时期的Node js入门 的一部分 Connect Express与Koa 为了更好地理解后面的内容 首先需要梳理一下Node中Web框架的发展历程 Connect 在connect官方网站提供的定义是 Con
  • Python实现贝叶斯优化器(Bayes_opt)优化卷积神经网络回归模型(CNN回归算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 贝叶斯优化器 BayesianOptimization 是一种黑盒子优化器 用来寻找最优参数 贝叶斯优化器是
  • 从枚举类型的ordinal()方法说起

    文章背景 本周有一个开发任务涉及到了枚举类型的修改 需要对枚举类型新增一项 在新增的时候我没有加在已有项的最后面 而是在中间随便找了个位置 其实也不是很随便 我是根据语义关联性觉得放在某一项后面比较合适 没想到的是 我的无心之举经造成了大
  • 安装centos 8

    安装centos 8 首先下载centos 8镜像 地址 http mirrors aliyun com centos 8 isos x86 64 这里选择了boot版本 boot版与完整版的区别是体积小 通过网络源安装 下载完成大概有70
  • Solidity与dapp开发学习记录4

    目录 函数修饰符进阶 Payable修饰符 运用 取款 Withdraws 运用 准备好设计僵尸对战 随机数 Random Numbers 通过keccak256生成随机数 此方法容易受到不诚实节点的攻击 如何在以太坊中安全地生成随机数 运
  • BASE64Encoder及BASE64Decoder的正确用法

    一直以来Base64的加密解密都是使用sun misc包下的BASE64Encoder及BASE64Decoder的sun misc BASE64Encoder BASE64Decoder类 这人个类是sun公司的内部方法 并没有在java
  • 腾讯云搭建邮局

    想在个人电脑上面搭个邮局临时用一下 没有想到宽带的端口全部被封了 25 110 143本来以为不能发就算了 收也不行了 完全没有办法用 还好腾讯云有按月开通的 先开通一个月试试 花了三十块 开了一个 轻量应用服务器 这里安全方面 没有什么要
  • 系统架构设计高级技能 · 层次式架构设计理论与实践

    现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now everything is for the future of dream weaving wings let the dream fly in reality 点击进入系
  • dlopen和 dlsym的使用方式

    背景 为了把不同的逻辑解耦 一般会把各个业务封装成动态库 然后主逻辑去调用各个动态库 这里有个问题是 为什么以前我们都是通过include第三方的头文件 然后通过连接器链接动态库实现 现在却要利用dlopen呢 考虑以下情况 比如我们要用c
  • Spring Data - Spring Data JPA 提供的各种Repository接口

    最近博主越来越懒了 深知这样不行 还是决定努力奋斗 如此一来 就有了一下一波复习 演示代码都基于Spring Boot Spring Data JPA 传送门 博主的测试代码 什么是Spring Data JPA Spring Data 是
  • ubuntu配置静态IP / 重启网络

    系统 Ubuntu14 以及 Ubuntu20 04 一 ubuntu14 配置静态IP 1 找到文件 vim etc network interfaces 2 修改如下部分 interfaces 5 file used by ifup 8
  • 微信小程序定位权限怎么打开

    一 准备工作 既然要定位 那么肯定需要找到跟地图相关的功能API 查找微信开发文档 因为我们这里只是需要记录地位功能 不需要打开地图 所以只使用wx getLocation 即可 查看这个方法后 发现微信只是提供了定位的经纬度 居然没有提供
  • ROS期末复习4:Ubuntu文件管理及常用命令

    一 常用操作命令 1 文件内容显示命令 1 cat cat 选项 文件名 用来串接文件或显示文件的内容 也可以从标准输入设备读取数据并将其结果重定向到一个新的文件中 达到建立新文件的目的 选项如下 1 n 由1开始对所有输出的行数进行编号
  • border-sizing属性详解和应用

    box sizing用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型 它有content box border box和inherit三种取值 inherit指的是从父元素继承box sizing表现形式 不再冗赘 1 属性讲解 c
  • 性能测试场景设计深度解析

    感谢合众支付资深技术专家程超的推荐与审校 作者 张允庆 现就职于易宝支付有限公司 任职高级性能测试工程师 有多年的系统性能测试设计与优化经验 经历过大小上百个项目的性能优化 对性能测试有着较为深入的研究 2008年底获得北京大学理学学士学位
  • Hystrix工作步骤说明以及服务监控hystrixDashboard

    目录 一 步骤说明和流程解析 二 服务监控hystrixDashboard 官网 How it Works Netflix Hystrix Wiki GitHub 一 步骤说明和流程解析 1 创建 HystrixCommand 用在依赖的服
  • 第二章 Redis高级

    第二章 Redis高级 学习目标 目标1 能够说出redis中的数据删除策与略淘汰策略 目标2 能够说出主从复制的概念 工作流程以及场景问题及解决方案 目标3 能够说出哨兵的作用以及工作原理 以及如何启用哨兵 目标4 能够说出集群的架构设计
  • 大数据之Shell基础

    目录 1 shell概述 2 shell脚本入门 2 1 shell 解析器 2 2 脚本格式 3 shell中的变量 3 1 系统变量 3 2 自定义变量 4 运算符 4 1基本语法 4 2 案例实操 5 条件判断 5 1 基本语法 5