Shell“语言程序设计基础......“

news2024/11/19 18:27:44
  • Shell语言也有设计基础吗?......
    • 没有
    • 所谓的语言程序设计基础往往是一种就是菜鸡互啄的一种状态......
    • 哦,据说当年,发明笔记本电脑的人(想出发明笔记本电脑这个创意的人)一开始的工作是写说明书的
    • Linux 或者 Unix 发明的那个年代应该还没有这种充满了营销的或者应试的表述方法:"...语言程序设计基础"

Shell 程序结构

  • Shell 脚本往往在 vim 中编写.
    • unix/linux命令
    • bash shell 命令
    • 程序结构控制语句 和 注释
  • Shell 脚本的第一行指出执行脚本的解释器,在 Linux bash 编程中一般为
#!/bin/bash
  • 非第一行出现的 # ,都将被视为注释的开始

Linux Shell 变量

  • 系统变量: HOME PWD SHELL USER echo $HOME...
  • 自定义变量
  • Shell 语言是区分空格的,这一点比绝大多数的语言都要好?
    • 区分空格是很重要的一件事情!空格他也占内存啊.......

自定义变量规则  变量=值

  • 变量名称可以由字母,数字和下划线组成,不能以数字开头
  • 等号两侧不能有空格
  • 变量名称一般大写

将命令的返回值赋给变量

  • 例:
A=$(ls -la)

删除变量

unset 

设置环境变量

查看环境变量

Shell 中的运算

  • 以下内容只涉及整数
  • 查看命令是否被成功执行
$?
#返回0成功执行 返回其他没有成功执行
  • 表达式

expr $num1 operator $num2
或者
$(($num1 operator $num2))
  • 运算符
|        num1|num2        num1不为空且非0,返回num1;否则返回num2
&        num1&num2        num1不为空且非0,返回num1;否则返回0
\<        num1<num2        num1小于num2,返回1否则返回0
\<=       num1<=num2       ................1.......0
!=                            不等于       1.......0
\>                              大于        1.......0
\>=                            大于等于     1........0
=

+
-
\*
/
%                            取余


关系运算符

  • 关系运算符只支持数值运算,返回 true (在脚本中运行)

Shell 正则表达式

Shell 中的数据类型

  • shell 中只有字符串一种数据类型

字符串

单词分割功能

  • 空白字符作为单词分隔的字符
  • 需要包括空格字符的时候,必须用单引号或者双引号将字符串括起来

创建字符串

  • 无引号创建:所有特殊字符作用保留
  • 单引号创建:所有字符原样输出,所有特殊字符全部失去作用,单词分割功能失效
  • 双引号创建:支持变量替换、命令替换,其它所有字符会原样输出,单词分割功能失效

字符串的长度

${#变量名}

字符串的拼接

  • 字符串在一起即为拼接,无需加号辅助

字符串的截取

#shell 字符串 从零开始
${string:position}            #从position开始提取子串
${string:position:length}     #从position开始提取length长的子串
${string#substring}           #从string的开头,删除最短匹配substring的子串
${string##substring}          #从string的开头,删除最长匹配substring的子串
${string%substring}           #从string的结尾,删除最短匹配substring的子串
${string%%substring}          #从string的结尾,删除最长匹配substring的子串

字符串的替换

${string/substring/replacement}        #使用replacement代替第一个匹配的substring
${string//substring/replacement}	   #使用replacement代替所有匹配的substring
${string/#substring/replacement}	   #如果string的前缀匹配substring, 那么用replacement代替##匹配到的substring
${string/%substring/replacement}	   #如果string的后缀匹配substring, 那么用replacement代替##匹配到的substring

Shell 中的小数运算(bc)

  • bc 是 basic calculator 的简称
  • bc 的保留数位由输入小数位数(最多的一位)绝定

从 bash 进入 bc

  • 终端输入 bc
  • bc 选项
-h, --help: 帮助.
-i, --interactive: 交互模式.
-l, --mathlib: 预置数学程序.
-q, --quiet: 安静模式.
-s, --standard: 标准bc结构输入.
-w, --warn: 非标准结构给出警告.
-v, --version: 版本号.
  • 关系运算符
||
&&
!
==
  • 数学运算符
+
-
*
/
%
^
  • 自增与自减
++
--
  • 逻辑运算符
<
>
<=
>=
!=
  • 特殊函数
length()   #表达式长度
scale()    #表达式小数点后位数
sqrt()     #平方根

s(x)       #sin(x)
c(x)       #cos(x)
a(x)       #arctan(x)
l(x)       #ln(x)
e(x)       #exp(x)
j(n,x)     #n阶贝塞尔函数

字符串运算符

Shell 语言设计

vim

  • 通过 vim 设计 Shell 程序
  • vim好啊

参数读取

  • bash shell用位置参数变量存储命令行输入的所有参数,包括程序名。其中,$0表示程序名,$1表示第1个参数,$2表示第2个参数,…${11},${12}...
  • $*将所有的命令行参数看作一个整体存储
  • $@将命令行中以空格间隔的参数单独存储

数组 

  • Bash Shell 只支持一维数组
  • 数组下标由0开始
  • 数组用括号表示,数组中元素用空格号分隔开
  • 使用与遍历数组时  数组格式要写成 ${arr[@]} 或者 ${arr[*]}
a=(. . . .)
echo ${a[@]}
echo ${a[*]}
  • 获取数组的长度

echo ${#数组名[*]}
echo ${#数组名[@]}
  • 获取数组某一个元素的值
echo ${数组名[索引值]}
  • 数组的分片与截取
${数组名[@]:起始位置:截取长度}
  • 数组字符替换
${数组名[@]/旧字符/新字符}
  • 删除数组
unset 
  • 元素追加
  • 应用----冒泡排序

循环结构

  • for 循环
for <variable> in <list>
do 
    ...
    ...
done
  • 以下的 judgement 为条件表达式 
  • while 循环
while <judgement>
do
    ...
done
  • until 循环(until 循环执行一系列命令直至条件为 true 时停止)
until <judgement>
do
    ...
done
  • break 命令 (与其他语言基本相同)
  • continue 命令 (与其他语言基本相同)

配合循环举例说明1

#!/bin/bash
for((count = 1; count <= $1; count++))
do
    echo The $count th output.
done

配合循环举例说明2

#!/bin/bash
count=1
for param in "$*"
do
    echo "\$* parameter $count = $param"
    count=$[ $count + 1 ]
done

count=1
for param in "$@"
do
    echo "\$@ parameter $count = $param"
    count=$[ $count + 1 ]
done

关系运算符与分支结构

  • 分支结构
if...
    then
        ...
elif...
    then
        ...
else...
    ...
fi
#!/bin/bash
a=10
b=20

if [ $a -gt $b ]
then
   echo "a great than b"
else
   echo "a not great than b"
fi

函数

  • Shell 中的函数用 return 表示退出并返回一个退出值 脚本中用变量 $? 表示返回值
  • 函数格式1
function 函数名 {
    ...
return ...
}
  • 函数格式2
函数名() {
  ...
return ...
}

函数的参数传递

  • 参数传递和其他语言差不多的
  • ......

函数变量的作用范围

  • Shell 中变量默认全局有效
    • 这个显然与很多语言就不同了
    • 将变量限定在函数内部需使用local命令

内置函数 awk

Shell 文件操作与目录操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密码学 密钥管理

密钥管理 出发点&#xff1a;在一种安全策略指导下的密钥产生&#xff0c;存储&#xff0c;分配&#xff0c;删除&#xff0c;归档和应用方案。 目的&#xff1a;维持系统各实体之间的密钥关系&#xff0c;抗击各种威胁&#xff1a; 1.密钥泄露 2.密钥和公钥身份真实性丧失 3…

计算机内存机制精讲

全文目录1、一个程序在计算机中到底是如何运行的&#xff1f;2、虚拟内存到底是什么&#xff1f;虚拟地址中间层思想3、虚拟地址空间以及编译模式CPU的数据处理能力编译模式32位编译模式64位编译模式4、内存对齐&#xff0c;提高寻址效率5、内存分页机制&#xff0c;完成虚拟地…

react-native学习过程记录

1、关于react-native init 创建项目报错 cli.init is not a function 问题解决 直接采用npx react-native init chapter2 --version 0.68.2 创建项目&#xff08;即指定version&#xff09; 参考地址&#xff1a;https://blog.csdn.net/qq_42231156/article/details/126396576…

【云原生进阶之容器】第二章Controller Manager原理剖析--2.1节Controller Manager综述

1 K8S Controller Manager原理解析 1.1 Controller Manager作用简述 一般来说,智能系统和自动系统通常会通过一个“操作系统”不断修正系统的工作状态。在Kubernetes集群中,每个Controller都是这样的一个"操作系统",它们通过APIServer 提供的(List-Watch)接口实…

小程序集成Three.js开发常见问题

1.加载模型后开发者工具卡顿 我想很多小伙伴都遇到过这个问题&#xff0c;网上很多方法&#xff0c;说什么清缓存&#xff0c;清内存&#xff0c;基本作用都不大。在不断的摸索中&#xff0c;我逐渐找到了一些解决的办法&#xff0c;希望对你有帮助。 (1) 截至发文时间&#…

Java-集合(1)

什么是集合&#xff1f; 在前面的学习中&#xff0c;保存多个数据&#xff0c;用的是数组。 但是数组有很多不同的地方&#xff1a; 1.长度开始时必须指定&#xff0c;且一旦指定无法更改 2.保存的必须为同一类型元素&#xff0c;虽说可以多态保存&#xff0c;但是限制性也很大…

再学C语言17:类型转换

语句和表达式通常只应该使用一种类型的常量和变量 如果使用混合类型&#xff0c;C将会使用一个规则集合自动完成类型转换 一、基本的规则 1&#xff09;当出现在表达式中时&#xff0c;有符号和无符号的char类型和short类型都将自动被转换为int&#xff08;在需要的情况下将…

新华三“智・行中国2022”|大厂行动,如何擘画“内循环”的数字未来?

作者 | 曾响铃 文 | 响铃说 继农业经济、工业经济之后&#xff0c;数字经济登上历史的舞台&#xff0c;成为大国的主要经济形态。在我国&#xff0c;根据中国信息通信研究院发布的《中国数字经济发展白皮书&#xff08;2022年&#xff09;》&#xff0c;截至2021年&#xff0…

关于浙大MPA复试的一些常规问题

2022年联考笔试刚刚落下帷幕&#xff0c;就收到很多小伙伴关于浙大MPA项目复试的问题咨询&#xff0c;趁着今天有空就大家问的一些问题在这里统一做个回复哦~1、问&#xff1a;正常情况下多少分可以进入浙大MPA项目复试&#xff1f; 答&#xff1a;统计了2018——2022浙大MPA项…

Harmony/OpenHarmony应用开发-转场动画组件内转场

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验&#xff08;需要配合animateTo才能生效&#xff0c;动效时长、曲线、延时跟随animateTo中的配置&#…

GitHub官网下载Axios.js步骤

目录 前言必读 一、下载步骤 1.进入GitHub官网 2.搜索axios 3.点击这个axios/axios 4.点击压缩包下载 5.解压&#xff0c;进入到dist文件里面就找到了 二、使用方法 前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、下载步骤 1.进入…

数据在内存中的存储(11)

目录 1、数据类型介绍 1、类型的基本归类 1、整形家族&#xff1a; 2、浮点数家族&#xff1a; 3、构造类型&#xff08;自定义类型&#xff09;&#xff1a; 4、指针类型&#xff1a; 5、空类型&#xff1a; 2、整形在内存中的存储 1、原码、反码、补码 2、大小端介…

[框架]Mybatis的使用

目录一、数据持久化的概念及ORM&#xff08;Object Relational Mapping “对象关系映射”&#xff09;的原理1.1 持久化1.2 ORM&#xff08;Object Relational Mapping&#xff09;1.3 ORM解决方案&#xff08;包含四个部分&#xff09;二、MyBatis简介2.1 简介2.2 特点2.3 MyB…

数据结构-考研难点代码突破(C++实现无向图图最小生成树算法(Prim,Kruskal)图解操作细节(引自C语言中文网))

以代码的方式复习考研数据结构知识点&#xff0c;这里在考研不以代码为重点&#xff0c;而是以实现过程为重点 文章目录1. 无向图最小生成树算法Kruskal算法C代码实现Prim算法C代码实现1. 无向图最小生成树算法 常见基本概念记忆&#xff1a; 生成树定义&#xff1a; 无向图中…

MySQL索引相关知识

1、什么是索引&#xff1f; 索引是存储引擎用于提高数据库表的访问速度的一种数据结构。通过给字段​​添加索引​​​可以​​提高数据的读取速度​​​&#xff0c;提高项目的并发能力和抗压能力。​​索引优化​​​时mysql中的一种优化方式。索引的作用相当于​​图书的目录…

一文搞懂Linux内核进程原理及系统调用机制

进程四要素 有一段程序代其执行有进程专用的系统堆栈空间在内核有task_struct数据结构进程有独立的存储空间&#xff0c;拥有专有的用户空间 如果具备前三点缺少第四条&#xff0c;称为“线程”&#xff1b;如果完全没有用户空间&#xff0c;称为“内核线程”;如果共享用户空间…

中国剩余定理

最近总是用到中国剩余定理&#xff0c;以前对于这个定理非常的模糊&#xff0c;有时间静下心来简单的学习一下中国剩余定理&#xff0c;文章没有深度&#xff0c;写下这篇博客以作记录。 中国剩余定理CRT前言一、描述二、中国剩余定理求解方法1.除以三余二2.除以五余三3.除以七…

14. UserAgent 反爬是如何实现的,来看看这篇博客

本篇博客实现 【爬虫训练场】 的第一个反爬案例&#xff0c;User-Agent 反爬。 文章目录什么是 User-Agent 反爬在 Python Flask 中实现 User-Agent 反爬什么是 User-Agent 反爬 User-Agent 反爬是一种防止网站被爬虫爬取的技术。 当爬虫向网站发送 HTTP 请求时&#xff0c;会…

初识Kubernetes:(3)Kubernetes资源管理

初识Kubernetes&#xff1a;&#xff08;3&#xff09;Kubernetes资源管理1 资源管理介绍2 YAML语法介绍2.1 YAML语法介绍2.2 YAML语法示例2.2.1 YAML常量2.2.2 对象2.2.3 数组3 资源管理方式3.1 资源管理方式3.2 命令式对象管理3.2.1 kubectl命令3.2.2 操作&#xff08;comman…

操作系统期末考试必会题库2——进程管理

1、某系统出现故障&#xff0c;通过相关指令查看&#xff0c;CPU占有率为0&#xff0c;内存有大量空余&#xff0c;但是用户在其程序中得不到任何相应&#xff0c;请从进程状态分析&#xff0c;当前用户所使用的进程可能是什么状态&#xff08;就绪&#xff0c;运行&#xff0c…