大数据之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基础 的相关文章

  • 如何用awk删除以“C”开头的行?

    如何使用以下命令从文本文件中删除以 C 开头的行awk 有什么建议请 如果数据在文件中data txt then With awk awk C data txt With grep grep v C data txt 显示开头不带 C 的所
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 如何正确使用fork、exec、wait

    我正在编写的 shell 需要执行用户提供给它的程序 这是我的程序的非常简短的简化版本 int main pid t pid getpid this is the parents pid char user input NULL size
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • Spark中如何获取map任务的ID?

    Spark中有没有办法获取map任务的ID 例如 如果每个映射任务都调用用户定义的函数 我可以从该用户定义的函数中获取该映射任务的 ID 吗 我不确定您所说的地图任务 ID 是什么意思 但您可以使用以下方式访问任务信息TaskContext
  • 通过 Java 连接 Apache Drill

    在 Apache Drill 的 Wiki 中 我只能看到通过 SqlLine 客户端运行的查询 除了 REST API 之外 是否有任何编程方式可以在 Drill 中运行查询 有任何示例或指示吗 或者它与使用 JDBC 驱动程序运行 SQ
  • 如何设置 tmux 在启动时打开指定的窗口?

    如何设置 tmux 使其在启动时打开指定的窗口 您可以编写一个小 shell 脚本来启动 tmux 以及所需的程序 我在一个名为 dev tmux 的 shell 脚本中包含以下内容 开发环境 bin sh tmux new session
  • 使用 Hive 计算文本变量的单词频率

    我有一个变量 每一行都是一个句子 例子 Row1 Hey how are you Rwo2 Hey Who is there 我希望输出是按单词分组的计数 Example Hey 2 How 1 are 1 我正在使用 split a bi
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 每次重新运行终端时,我都必须输入 export PATH=~/anaconda/bin:"$PATH"

    我已经安装了 Anaconda for Mac 但出现了一些问题 当我输入命令时which conda or which ipython I get conda not found and ipython not find 然后我找到这个命
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • Hive:为现有文件夹结构添加分区

    我在 HDFS 中有一个文件夹结构 如下所示 但是 实际上没有使用以下命令在表上创建分区ALTER TABLE ADD PARTITION命令 即使文件夹结构的设置就像表有分区一样 如何自动将所有分区添加到Hive表中 Hive 1 0 外
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • Spark-submit,客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS];

    我使用 kerberos 设置了 hadoop 集群 但是当我运行 Spark Submit 时 它抛出异常 17 10 19 08 46 53 WARN scheduler TaskSetManager Lost task 0 0 in
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • 如何配置Hive仓库路径?

    我修改了这部分

随机推荐

  • 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