当前位置: 首页 > java >正文

shell编程基础入门-1

文章目录

  • 前言
  • 1、shell 简介
  • 2、shell脚本的构成&执行
  • 3、shell-变量
    • 3.1 语法格式
    • 3.2 变量使用
  • 4、字符串
    • 4.1 单引号
    • 4.2 双引号
    • 4.3 获取字符串长度
    • 4.4 提取子字符串
    • 4.5 查找子字符串
  • 5、参数传递
    • 5.1 参数传递方式
    • 5.2 特殊字符
  • 6、运算符
    • 6.1 运算符的基本使用
    • 6.2 关系运算符
    • 6.3 逻辑运算符
    • 6.4 字符串运算符
    • 6.5 文件测试运算符
  • 总结

前言

在日常工作中,在遇到些重复性高的工作时,如果还是依靠手工去解决会浪费大量时间,大大减少了我们工作的效率,这个时候,shell脚本就有作用了,它可以代替我们去完成重复性高的工作,提供我们的工作效率。下面就开始学如何去写shell脚本

1、shell 简介

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们

2、shell脚本的构成&执行

使用vim命令创建一个demo.sh的文件(一般脚本都是以.sh结尾的文件)

#! /bin/bash/

文本的第一行是脚本申明,使用默认的解释器(/bin/bash/)来执行脚本
后面就是你写的一些命令、控制语句等来完成你的预期,下面是示例

#! /bin/bash/
echo "hello world"

写完后保存并退出:wq
执行脚本有三种方法

  • sh demo.sh
  • /home/jiang/demo.sh
  • ./demo.sh
    其中使用路径的方法执行前,需要给文件赋权
## 添加执行权限
chmod +x demo.sh

文件赋权后,可以用绝对路径或者相对路径来执行脚本
在这里插入图片描述

3、shell-变量

3.1 语法格式

变量的语法: 变量名=值

# 变量的名字是由写程序的人自主定义的。 通常在shell定义格式为: 一个小写字母单词、 多个单词组成时每个单词之间使用"_"分隔
your_name="bigdata.com" 
# 通常开发中命名惯例、见名知其意,如:name、gender、student_name

注意:等号两边不能有空格
命名规则

  • 首个字符必须为字母
  • 中间不能有空格,可以使用下划线
  • 不能使用标点符号
  • 不能使用 bash 里的关键字

3.2 变量使用

使用一个定义过的变量,只要在变量名前面加 $ 即可
花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的
边界

your_name="bigdata.com"
echo $your_name
echo ${your_name}

变量是可以重新赋值的
在这里插入图片描述

## 定义只读变量
readonly name="bigdata"
## 只读变量不能删除,也不能修改值

在这里插入图片描述

## 删除变量
unset name

在这里插入图片描述
变量的类型可以分为:局部变量、全局变量

  • 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其
    他 shell 启动的程序不能访问局部变量
  • 全局变量(环境变量):所有的程序,包括shell启动的程序,都能访问环境
    变量,有些程序需要环境变量来保证其正常运行。可以用过 set 命令查看当
    前环境变量

4、字符串

4.1 单引号

food='KFC'
str='I eat $food'
echo $str

单引号字符串的限制

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不
    行),但可成对出现,作为字符串拼接使用
    在这里插入图片描述

4.2 双引号

food='KFC'
str="I eat $food"
echo $str
  • 双引号里可以有变量
  • 双引号里可以出现转义字符
    在这里插入图片描述

4.3 获取字符串长度

food='hsiocnwo'
echo $food
echo ${#food}

在变量名前加#,可以获得该变量值的字符串的长度
在这里插入图片描述

4.4 提取子字符串

food='apple KFC banana'
## 从第三个字符开始截取到最后
echo ${food:3}
## 从第三个字符开始,截取八个字符
echo ${food:3:8}

注意:当字符串中有空格时,空格也算一个字符存在
字符串是从0开始计算

在这里插入图片描述

4.5 查找子字符串

str='this is an apple and a banana'
echo `expr index "$str" banana`

查找子字符串 “banana"中任何一个字符在字符串”$str" 中首次出现的位置
在这里插入图片描述

5、参数传递

5.1 参数传递方式

## 传递参数的方式
./shell.sh [空格] 参数1 [空格] 参数2
## $0 表示当前脚本名称

在这里插入图片描述

在这里插入图片描述

5.2 特殊字符

$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程 ID号
$!后台运行的最后一个进程的 ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
#! /bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
sleep 10 &
echo "后台运行的最后一个的进程号: $!";
echo "当前脚本运行的进程号: " $$;

在这里插入图片描述
$ 和 $@*

  • 相同点: 都表示传递给脚本的所有参数
  • 不同点:被" "包含时
    • "$" 会将所有的参数作为一个整体,以"$1 $2 … $n" 的形式组成一个整串
    • “$@” 会将各个参数分开,以"$1" “2"…"2" … "2""n” 的形式组成一个参数列表
      在这里插入图片描述

6、运算符

6.1 运算符的基本使用

expr 是一款表达式计算工具,使用它能完成表达式的求值操作
在这里插入图片描述
在这里插入图片描述

  • 运算数和运算符之间要有空格。例如: 2+2 是不能运算的,必须写成 2 + 2
  • 完整的表达式要被`符号包含
  • 还可以通过(()) 、 $[] 进行算术运算
    在这里插入图片描述
read -p		提示用户输入-n		定义字符数

6.2 关系运算符

数字的关系运算符: >		>= 		< 		<= 		!= 		==
运算符含义
-eq检测两个数是否相等,相等返回 true
-ne检测两个数是否不相等,不相等返回 true
-lt小于 应用于:整型比较。 例: 10 lt 5
-gt检测左边的数是否大于右边的,如果是,则返回 true
-le小于或等于 应用于:整型比较
-ge大于或等于 应用于:整型比较

在这里插入图片描述

6.3 逻辑运算符

运算符含义
-a双方都成立(and) 表达式1 –a 表达式2
-o单方成立(or) 表达式1 –o 表达式2
# && 表示并且(and)
echo "$[10>5 && 10%2==0]"
# || 表示或者 (or)
echo $((10>100 || 10%2==0))

在这里插入图片描述

6.4 字符串运算符

运算符含义
-n STRING字符串长度不为零 (非空字符串)
-z STRING字符串长度为0(空字符串)
=判断两个字符串是否一样
!=判断两个字符串是否不一样

在这里插入图片描述

6.5 文件测试运算符

运算符号含义示例
-f普通文件[ -f 文件路径]
-d目录[-d 目录路径]
-s文件不为空[-s 文件路径]
-e文件存在[-e 文件路径]
-r可读文件[-r 文件路径]
-w可写文件[-w 文件路径]
-x可执行文件[-x 文件路径]

在这里插入图片描述

总结

http://www.xdnf.cn/news/19356.html

相关文章:

  • Spring : 事务管理
  • 深度学习函数
  • 洛谷 P1395 会议 -普及/提高-
  • 一款基于selenium的前端验证码绕过爆破工具
  • java怎么实现根据指标预警的功能
  • C++多态介绍
  • 【Leetcode】17、电话号码的字母组合
  • 哪些人需要考道路运输安全员证?政策要求与适用范围
  • C++day2作业
  • 突破视界的边界:16公里远距离无人机图传模块全面解析
  • 毕业项目推荐:47-基于yolov8/yolov5/yolo11的焊缝质量检测识别系统(Python+卷积神经网络)
  • pip 镜像源配置(清华/阿里/豆瓣)详解
  • 智瞰风评 - 基于大语言模型的个人征信报告风险分析师
  • k8s--efk日志收集
  • 用简单仿真链路产生 WiFi CSI(不依赖专用工具箱,matlab实现)
  • Java数组入门教程:零基础掌握数组定义与遍历+新手避坑指南
  • Python3 lambda(匿名函数)
  • 轻量xlsx读取库xlsx_drone的编译与测试
  • 元素滚动scrollIntoView
  • A5M2(数据库管理工具)下载安装
  • 谈物质的运动与运动的物质
  • 智能消防栓闷盖终端:让城市消防管理更智慧高效
  • Robolectric拿到当前的Activity
  • 基于轴重转移补偿和多轴协调的粘着控制方法研究
  • 线性回归算法
  • Lombok(简化Java当中的开发)
  • 下载 | Win11 23H2正式版最新原版ISO系统映像 (22631.5840、多合一版本)-修复系统问题
  • 基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统
  • 编程与数学 03-004 数据库系统概论 09_物理结构设计
  • 栈溢出问题