首页 > 系统相关 >【博学谷学习记录】超强总结,用心分享 | shell基础

【博学谷学习记录】超强总结,用心分享 | shell基础

时间:2023-06-01 10:24:39浏览次数:55  
标签:文件 shell num 博学 echo addressUrl 斧头 超强

【博学谷IT技术支持】

一、shell简介

  • shell 是一种编写脚本程序的语言,常用于linux
  • shell是解释型语言,相对于其他的语言更加好学,它的语法和结构也比较简单
  • 通过编写脚本,能显著的提高开发的效率

二、shell的基础知识

每个sh文件都有这个开头,是指此脚本使用/bin/bash来解释执行

#!/bin/bash

字符型数据

这里注意以下几点,分别是

  1. 变量的声明方式
  2. 一般建议使用双引号,变量和值左右之间不能有空格
  3. 这里输出使用echo 输出变量需要在变量前加$
  • 输出单个变量
str1="123"
echo $str1 # 123 
  • 输出多个变量
str2="456"
echo "str1=$str1, str2=$str2" # str1=123, str2=456

注意:这里也可以使用${},但是建议使用上边的,比较简化

数组型数据

  • 素组的产生与使用凡是,如何获取数组的长度
@ 和* 可以获取数组中的所有元素
arr1=(1,2,3)
echo ${arr1[0]} ${arr1[1]} ${arr1[2]} # 1 2 3
echo ${arr1[*]}
echo ${arr1[@]}


# 截取字符串的长度 
# 截取从第2个到第4个字符串
str3="你好我好大家好"
echo ${str3:2:2} # 我好

# 获取字符串的长度
echo ${#str3} # 7

运算

  • shell的运算表达式比较麻烦,有使用expr表达式的,也有用$(()) 也有用$[]。这里推荐使用$[],原因是它省事
  • 注意一点的是乘法需要在*号前加\
a=1
b=2
echo `expr $a + $b` # 3
echo `expr $a \* $b` # 2
echo "========"
echo $((a+b)) # 3
echo "========"
echo $[a+b] # 3

流程控制

判断语句

这里是判断语句使用的运算法

  • -eq -ne 是对两个数进行判断,前者判断相同(=),后者判断不同(!=),均返回true
  • -gt -ge 分别是大于号(>)和大于等于号(>=), 结果是返回true
  • -lt -le 分别是小于号(<)和小于等于号(<=), 结果是返回true
  • -n SRING 判断字符串不为0
  • -z 判断字符串长度为0

文件类型的判断

  • -r -w -x 分别是文件存在可读,文件存在可写
  • -e -f -d 分别是文件存在,文件存在且是普通文件,文件存在且是目录
  • -h 存在且是符号链接

if 语句

注意if是有结束标志fi

if [ -n "123" ]; then
  echo "123字符串的长度不为0"
fi

if [ -z "" ]; then
  echo "空字符串的长度为0"
fi

addressUrl=/export/shell/
if [ -e $addressUrl ]; then
  echo "存在该文件夹"
else
  echo "不存在该文件夹"
fi

if [ -f $addressUrl ]; then
  echo "该文件存在是普通文件"
else
  echo "该文件存在不是普通文件"
fi

if [ -d $addressUrl ]; then
  echo "文件存在且是目录"
else
  echo "文件存在且不是目录"
fi


if [ -e $addressUrl ]; then
  echo "存在该文件夹"
elif [  ! -e $addressUrl ]; then
  echo "不存在该文件夹"

if

for循环

  • for也可以用来读取数组
for i in 1  2  3  4
do
  echo "这是第$i个数字"
done

for((i=0; i< 10; i++))
do
  echo "展示第$i个循环数字"
done

while 循环

  • 这里求10的自减总值为多少 使用let 可以使用shell中的一些高级语法
num=10
total=0
while [ $num -lt 1]
do
  total=$[total+num]
  echo "total=$total" 
  let num--
done

case语法

echo "请选择您的1-3的数字:"
read -p "您输入的数字为:" num
case $num in 
  1) echo "您输入的是$num"
  ;;
  2) echo "您输入的是$num"
  ;;
  3) echo "您输入的是$num"
  ;;
  *) echo "您的输入有误"
  ;;
esac

函数

传递参数的特殊变量

  • $# 命令行参数的个数
  • $n n从1开始,类推代表第n个参数
  • $0 当前程序的名称
  • $? 前一个命令或者函数的返回码
function funcDemo() {
  echo "这个方法的名字为$0"
  echo "参数1为$1,参数2为$2,参数3为$3"
  echo "当前总共$#个参数"
}
getName 1 2 3
echo "前一个命令的返回码为$?"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6QupHHJp-1662782536003)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f87241a1d867405b8f4b630bec9c8181~tplv-k3u1fbpfcp-watermark.image?)]

返回值的范围是0-255

  • 0是命令运行成功 1是通知未知错误 2是误用shell命令
  • 126是命令不可执行 127是没有找到命令 128是无效退出参数
  • 128+x是linux信号x的严重错误
  • 255是退出状态码越界

select

echo "少男,少女,你想要什么斧头"
PS3="你要金斧头还是银斧头: "
select i in "金斧头" "银斧头" "铜斧头"
do
   break;
 done
echo "少男,少女 这是你的$i"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEQwRQ1F-1662782536005)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4c60cb3433c24fc1966ce94235206849~tplv-k3u1fbpfcp-watermark.image?)]

selct与case结合


echo "少男,少女,你想要什么斧头"
PS3="你要金斧头还是银斧头: "
select i in "金斧头" "银斧头" "铜斧头"
do
  case $i in 
    "金斧头") echo "这是黄金做的啊, 你可以卖掉了";;
    "银斧头") echo "这是你的银斧头,你想做什么呢";;
    "铜斧头") echo "这是你的铜斧头,只能劈柴哦";;
  esac
  break;
done
echo "少男,少女 这是你的$i"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-siZNFrOF-1662782536006)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c43ab77d148f41019e08b450a3407272~tplv-k3u1fbpfcp-watermark.image?)]

标签:文件,shell,num,博学,echo,addressUrl,斧头,超强
From: https://www.cnblogs.com/neilniu/p/17448192.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享 | Zookeeper
    【博学谷IT技术支持】一、Zookeeper基础知识Zookeeper地址:https://zookeeper.apache.org/介绍Zookeeper是一个开源的分布式协调服务,用来给分布式应用提供一致性服务。Zookeeper本质是一个分布式的小文件存储系统。是Chubby一个开源的实现,是Hadoop和Hbase的重要组件。特性......
  • 博学谷学习记录】超强总结,用心分享 | 发送邮件-yagmail
    【博学谷IT技术支持】一、介绍yagmail是一个GMAIL/SMTP客户端,旨在使发送电子邮件尽可能简单。在项目中或多或少都需要使用的它,比如监控,比如用户提示等。二、项目使用使用流程首先要安装yagmail其次链接邮箱服务器,这里要设置发件人的邮箱,发件人的邮箱授权码,发件服务器等参......
  • 【博学谷学习记录】超强总结,用心分享 | Django简易开发指南
    【博学谷IT技术支持】一、介绍Django是python语言写的开源web开发框架,遵循MVC设计。Django的主要目的是简便、快捷的开发数据库驱动的网站。但是Django有一个专有名词:MVTM:Model,负责数据处理,内嵌了ORM框架V:View,接收HttpRequest,业务处理,返回HttpResponseT:Template,负责......
  • 【博学谷学习记录】超强总结,用心分享 | hive分区与分桶的区别
    【博学谷IT技术支持】公众号:积雷山摩云洞,欢迎关注!!!概念分区表:将数据分散到多个子目录中,在执行查询是,可以根据条件加快查询效率分桶表:是相对分区更细的颗粒度划分,分桶表是将表查分到不同的文件中,根据数据表某列的hash值进行分区,对某列数据分区就是对该列属性值的hash值取模,......
  • 【博学谷学习记录】超强总结,用心分享 | yarn的执行流程
    【博学谷IT技术支持】yarn的组成部分hadoop是由Common、HDFS、YARN、MapReduce等核心模块组成,yarn负责解决资源调度问题,这里介绍下yarn的业务执行流程。yarn是Master/Slave结构,主要包含ResourceManage、NodeManager、ApplicationMaster和Conainer等组件。ResourceManager......
  • 【博学谷学习记录】超强总结,用心分享 | 系统资源监控-psutil
    【博学谷IT技术支持】一、介绍psutil(python系统和进程实用程序)是一个跨平台库,用于在Python中检索有关正在运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监控、分析、限制进程资源和管理正在运行的进程。二、相关api获取CPU信息cpu_count:......
  • 【博学谷学习记录】超强总结,用心分享 | jupyter常用功能
    jupyter安装文档地址https://jupyter.org/installpipinstallnotebook启动命令jupyternotebookjupyter-themes修改主题安装主题https://github.com/dunovank/jupyter-themesgithub地址pipinstall--upgradejupyterthemes查看所有主题jt-l修改主题jt-tg......
  • 【博学谷学习记录】超强总结,用心分享 | hbase基础操作
    【博学谷IT技术支持】HBase的介绍HBase是一个高可靠性、高性能、面向列、可伸缩的分布式操作系统。它是建立在HDFS之上的数据库系统,HBase是不支持SQL的,没有表关系,也无法join,不支持事务。HBase是基于google发布BigTable这篇论文而产生的,基于HDFS,数据最终存储时是在HDFS上,必......
  • 【博学谷学习记录】超强总结,用心分享 | MapReduec编程
    【博学谷IT技术支持】一、介绍MapReduce是将一个大的计算任务拆分成一个个小任务,让小任务在不同的计算机中进行处理,最后将任务的结果进行汇总的过程。MR的工作流程可以分为三个阶段,分别是map、shuffle、reduce二、编程Mapper阶段自定义一个类来集成Mapper类,重写map方法,将方......
  • 【博学谷学习记录】超强总结,用心分享 | java基础
    【博学谷IT技术支持】前言java是一门非常好的语言,比较有必要学习一下:随着科技发展,只会前端是不行的,学习一门后端序言非常有必要,这里记录下自己学习的过程。一、数据类型java是一种强类型语言,数据必须明确类型。基础数据类型有8种,分别是整数类型:byte,short,int,long,......