5月29日-shell复习

一.Shell概述

1Linux提供的Shell解析器有:sudo cat /etc/shells

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

2bash和sh的关系

cd /bin
ll | grep bash 或者使用:ls -l /bin/ | grep bash

3Centos默认的解析bash

echo $SHELL

二.Shell脚本入门

1)脚本格式

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

案例一:第一个Shell脚本:helloworld

需求:创建一个Shell脚本,输出helloworld

创建文件夹:mkdir scripts

创建脚本:touch hello.sh

vim hello.sh

在helloworld.sh中输入如下内容

#!/bin/bash

echo "helloworld"

打印输入:bash /scripts/hello.sh 对应的绝对路径

第二章方式打印:sh /scripts/hello.sh 一样效果

给脚本增加执行命令:chmod +x /scripts/hello.sh

直接绝对路径:./hello.sh

第三种:脚本的常用执行方式(source 是 shell 内嵌)

source  /scripts/hello.sh

source hello.sh

. hello.sh

第二个Shell脚本:多命令处理

直接输入hello.sh

bash: hello.sh: 未找到命令...

cp hello.sh /bin/

sudo cp hello.sh /bin/(一般不要使用)

(方法:不改变bin目录,正常执行)

1.脚本参数用法:

三.变量

1.$n

./hello.sh 参数(xiaoming)

' ===$n============'原封不动的输出

#!/bin/bash
echo '================$n===================='
echo script name:0
echo 1st parameter:$1
echo 2nd parameter:$2
 

输出:./parameter.sh abc def

================$n====================
script name:0
1st parameter:abc
2nd parameter:def

2.$#

用于循环中,次数

#!/bin/bash
echo '================$n===================='
echo script name:0
echo 1st parameter:$1
echo 2nd parameter:$2

echo '================$n===================='
echo parameter numbers:$#

 ./parameter.sh abc def

================$n====================
script name:0
1st parameter:abc
2nd parameter:def
================$n====================
parameter numbers:2

3.$*和$@用法

 $*:代表命令行中所有的参数,$*把所有的参数看做一个整体

$@:代表命令行中所有的参数,$@把这个参数区分对待

1st parameter:abc
2nd parameter:def
================$n====================
parameter numbers:2
================$*====================
abc def
================$@====================
abc def

4.$?

功能描述:最后一次执行的命令的返回状态。变量为0,上个命令正确执行;

变量的值为非0(具体数值,由自己命令决定)证明上个命令执行不正确;

 四、运算符

基本语法:“$((运算式))”或“$[运算式]”

 expr:表达式

expr 1 + 2

expr 5 - 2

直接写乘报错:

应写:echo $[5 * 2]或者使用echo $((5*2))

[atguigu@hadoop102 scripts]$ expr 1 + 2
3
[atguigu@hadoop102 scripts]$ expr 5 - 2
3

命令替换:

赋值给a=$[8*2]

echo $a

另外写法:

[atguigu@hadoop102 scripts]$ a=$(expr 5 \* 2)  (一般不用)
[atguigu@hadoop102 scripts]$ echo $a
10

使用expr写法:乘法

[atguigu@hadoop102 scripts]$ a=`expr 5 \* 2`
[atguigu@hadoop102 scripts]$ echo $a
10

五.条件判断

     语法:[ condition ]

1.常用判断条件

(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)

[atguigu@hadoop102 scripts]$ a=15
[atguigu@hadoop102 scripts]$ [ $a -lt 20 ] && echo "$a < 20" || echo "$a >=20"
15 < 20
[atguigu@hadoop102 scripts]$ a=27
[atguigu@hadoop102 scripts]$ [ $a -lt 20 ] && echo "$a < 20" || echo "$a >=20"
27 >=20

六、流程控制(重点) 

1 if 判断

1.基本语法

if [ 条件判断式 ];then

  程序

fi

或者

if [ 条件判断式 ]

  then

    程序

fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

举个例子:

a=25
if [ $a -gt 18 ]; then echo OK;fi 
[atguigu@hadoop102 scripts]$ if [ $a -gt 18 ] && [ $a -lt 35 ];then echo OK;fi
OK

2 case 语句

基本语法

case $变量名 in

  "值1")

    如果变量的值等于值1,则执行程序1

    ;;

  "值2")

    如果变量的值等于值2,则执行程序2

    ;;

  …省略其他分支…

  *)

    如果变量的值都不是以上的值,则执行此程序

    ;;

esac

注意事项:

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

3.for 循环

1.基本语法1

for (( 初始值;循环控制条件;变量变化 ))

  do

    程序

  done

例如:创建脚本:parameter_for_test.sh

给予权限:chmod 777 parameter_for_test.sh执行

echo '===================$*===================='
for para in "$*"
do
       echo $para
done

echo '==================$@====================='
for para in "$@"
do
      echo $para
done
     

执行:./parameter_for_test.sh a b c d e

结果输出:
===================$*====================
a b c d e
==================$@=====================
a
b
c
d
e

备注:“$*”把所有元素当成整体输出

“$@”把数据当成独立数据输出,依次打印

4.while 循环

1.基本语法

while [ 条件判断式 ]

  do

    程序

  done

七、read读取控制台的输入

1.基本语法

read(选项)(参数)

选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)。

参数

变量:指定读取值的变量名

八、函数(一段代码的集合)

1.系统函数(也叫:命令替换)

basename:

创建脚本:cmd_test.sh

#!/bin/bash
filename="$1"_log_$( date +%s)
echo $filename  

 执行权限:chmod +x cmd_test.sh

备注:$( date +%s)

1).basename基本语法

basename [string / pathname] [suffix]   (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

选项:

suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

例如:

[atguigu@hadoop102 scripts]$ basename /home/atguigu/scripts/parameter.sh 
parameter.sh

本质上路径可以随便写(不需要确定是否存在具体路径):找最后一个目录/ 相当于做字符串剪切

[atguigu@hadoop102 scripts]$ basename /home/atguigu/helo/parameter.sh 
parameter.sh

剪切最后一个/后缀

[atguigu@hadoop102 scripts]$ basename /home/atguigu/scripts/parameter.sh .sh
parameter

2).dirname基本语法

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

截取最后一个斜杠 /之前的路径:

[atguigu@hadoop102 scripts]$ dirname /home/atguigu/scripts/parameter.sh 
/home/atguigu/scripts

截取最后一个斜杠前的相对路径:

[atguigu@hadoop102 scripts]$ dirname ../atguigu/scripts/parameter.sh 
../atguigu/scripts

 截取路径:仅值切割 最后一个斜杠前路径 /

2.自定义函数

九、综合案例

1.归档文件

归档命令:tar

自动归档:crontab -l

十、正则表达式

正则表达式用来检索,替换,符合某个模式的文本。

1.常规匹配

不含特殊字符的表达式匹配它自己。(存文本匹配)如筛选

cat /etc/passwd | grep xx

2.特殊匹配

1)使用^号配置开头

atguigu@hadoop102 ~]$ cat /etc/passwd | grep ^a
adm:x:3:4:adm:/var/adm:/sbin/nologin
2)$匹配一行的结束

例如:匹配出所有以t结尾的行。

[atguigu@hadoop102 ~]$ cat /etc/passwd | grep t$
halt:x:7:0:halt:/sbin:/sbin/halt

匹配出空格:cat /etc/passwd | grep ^$

[atguigu@hadoop102 scripts]$ cat daily_achive.sh |grep -n  ^$
2:
9:
22:
25:
29:
33:
35:
38:
49:


3. .匹配一个任意的字符

[atguigu@hadoop102 scripts]$ cat daily_achive.sh |grep r..t
DEST=/home/atguigu/scripts/archive/$FILE

4. *不单独使用

他和上一个字符连用,表示匹配上一个字符0次或多次。

[atguigu@hadoop102 scripts]$ cat daily_achive.sh |grep r..t
DEST=/home/atguigu/scripts/archive/$FILE
5. .* 

[atguigu@hadoop102 scripts]$ cat /etc/passwd | grep ^a.*bash$
atguigu:x:1003:1003::/home/atguigu:/bin/bash


6.字符区间使用(中括号):[ ]

[atguigu@hadoop102 scripts]$ echo "rbtadfasf" | grep r[a,b]t
rbtadfasf
[atguigu@hadoop102 scripts]$ echo "23ddratadfasf" | grep r[a,b]t
23ddratadfasf

7. \ 

十一、文本处理工具

1.cut

1.基本用法

cut [选项参数]  filename

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣257. 二叉树的所有路径

思路&#xff1a;题目需要记录从根节点开始走的路径&#xff0c;无疑选用前序遍历&#xff0c;用一个数组paths 记录走过的节点信息&#xff0c;遇到叶子节点就用另一个list记录下路径&#xff0c;回溯时删掉paths尾节点即可 class Solution {public List<String> binar…

数学函数,字符串

目录 Math类 三角函数 指数函数 取整方法 其他方法 String类 常见方法 字符串比较方法 子串和数字与字符串的转换 Math类 Math类在java.lang中&#xff0c;不用显式引入。 三角函数 private static void triangleFunc() {double degree Math.toDegrees(Math.PI / 3…

PMP学习和考试难度分析

PMP&#xff08;项目管理专业人士&#xff09;考试目前是全球范围内比较具权威性和认可度的项目管理证书之一。因此PMP考试的难度是一个备受关注的话题。根据我们以往的学员经验我从不同角度解析PMP考试的难度&#xff0c;并提供一些应对挑战的建议。希望对大家有所帮助。 PMP考…

PPT 隐藏开启对象图层

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 制作PPT的时候&#xff0c;有时候需要在一张PPT放置多个依次出现的内容&#xff0c;然后设置对应的动画&#xff0c;要是需要对某个内容进行修改的话&#xff0c;就会很不方便&#xff0c;这个时候就需要使用&…

JSL-11G定时限过流继电器 JOSEF约瑟

JSL系列定时限过流继电器型号&#xff1a; JSL-11定时限过流继电器; JSL-12定时限过流继电器; JSL-13定时限过流继电器&#xff1b; JSL-14定时限过流继电器&#xff1b; JSL-15定时限过流继电器&#xff1b; JSL-16定时限过流继电器; JSL-21定时限过流继电器; JSL-22定时限…

【数据结构】六种排序实现方法及区分比较

文章目录 前言插入排序希尔排序选择排序堆排序快速排序冒泡排序总结 前言 众所周知&#xff0c;存在许多种排序方法&#xff0c;作为新手&#xff0c;最新接触到的就是冒泡排序&#xff0c;这种排序方法具有较好的教学意义&#xff0c;但是实用意义不高&#xff0c;原因就在于…

【文件fd】回顾C语言文件操作 | 详细解析C语言文件操作写w追加a | 重定向和“w““a“

目录 前言 回顾C语言的操作 Q1 Q2 Q3 C语言文件操作 w方式 a方式 重定向和"w""a"方式 前言 前面进程虚拟地址空间让我们对进程的理解更加深入。在基础IO我们会详细介绍文件和文件系统。本专题的核心内容是文件。 深刻理解文件&#xff08;站在…

知识库管理系统:是什么、作用、如何搭建

你有没有遇到过这种情况&#xff1a;在工作中想要查找某个信息&#xff0c;查找了很多个文档还是没找到准确的信息&#xff1b;或者在团队中&#xff0c;总是在重复做着相同的资料搜集工作&#xff0c;浪费了大量时间和精力&#xff1f;如果你在烦恼这个问题&#xff0c;那么跟…

【Vue3】自定义组件directiveapp.use()

历史小剧场 崇祯很勤政&#xff0c;崇祯并非王国之君&#xff0c;弘光很昏庸&#xff0c;弘光活该倒霉&#xff0c;几百年来&#xff0c;我们都这样认为。 但我们之所以一直这样认为&#xff0c;只是因为有人这样告诉我们。 之所以有人这样告诉我们&#xff0c;是因为他们希望我…

Java | Leetcode Java题解之第121题买卖股票的最佳时机

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxProfit(int prices[]) {int minprice Integer.MAX_VALUE;int maxprofit 0;for (int i 0; i < prices.length; i) {if (prices[i] < minprice) {minprice prices[i];} else if (prices[i] -…

PieCloudDB Database Flink Connector:让数据流动起来

面对客户环境中长期运行的各种类型的传统数据库&#xff0c;如何优雅地设计数据迁移的方案&#xff0c;既能灵活地应对各种数据导入场景和多源异构数据库&#xff0c;又能满足客户对数据导入结果的准确性、一致性、实时性的要求&#xff0c;让客户平滑地迁移到 PieCloudDB 数据…

快递100使用

1.快递100 接口文档 链接: 接口文档 2.授权参数 授权Key: qZgsNFSo5391 customer&#xff1a;8EEA8C4FB90B275E228CA322EF0E61E5 3.技术文档 链接: 技术文档 4.使用 <dependency><groupId>com.github.kuaidi100-api</groupId><artifactId>sdk&l…

AI大模型探索之路-实战篇12: 构建互动式Agent智能数据分析平台:实现多轮对话控制

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

【CPP】双端队列简介(deque)

简介&#xff1a;双端队列(deque) 目录 1.概述2.特点3.底层原理 1.概述 双端队列&#xff1a;是一种顺序表和顺序表的结合数据结构&#xff0c;不是队列。 它提供顺序表的[]下标访问和链表的中间头部的较高效率插入删除操作。 2.特点 顺序表的优缺点&#xff1a; 优点&…

网络安全基础技术扫盲篇 — 名词解释之“数据包“

用通俗易懂的话说&#xff1a; 数据包就像是一个信封。当你写信给某个人时&#xff0c;你将内容写在一张纸上&#xff0c;然后将纸叠起来并放入信封中&#xff0c;就形成了一个完整要发送的数据内容。信封上有发件人和收件人的详细地址&#xff0c;还有一些其他必要的信息&…

动态规划(Dynamic-Programming)问题讲解

动态规划类问题 从已知子问题的解&#xff0c;推导出当前问题的解 推导过程可以表达为一个数学公式用一维或二维数组来保存之前的计算结果&#xff08;可以进一步降维优化&#xff09; 将当前问题 分解成子问题 &#xff0c;找出递归公式&#xff0c;分阶段进行求解 求解过程中…

【scau大数据技术与原理2】综合性实验Spark集群的安装和使用——安装启动spark shell篇

实验内容简介&#xff1a; Spark是一个分布式计算框架&#xff0c;常用于大数据处理。本次实验中&#xff0c;首先设计一个包含主节点和从节点的Spark集群架构&#xff0c;并在CentOS的Linux环境下进行搭建。通过下载并解压Spark安装包&#xff0c;配置环境变量和集群参数&…

python分别保存聚类分析结果+KeyError: ‘CustomerID‘报错

如何在完成聚类分析后按聚类编号保存数据并且带上原数据所属ID # 将每个聚类的数据保存到不同的文件中 for cluster_id in range(6): # 假设共有6个聚类cluster_data data[data[cluster] cluster_id]cluster_data_with_customer_id cluster_data.copy()cluster_data_with_…

量化研究---强大的可转债分析系统上线,提供api,实时数据支持

今天把可转债实盘的分析模型拿出来&#xff0c;放在服务器方便选股分析&#xff0c;方便后面对接大qmt直接选股交易 强大的禄得可转债自定义因子轮动系统完成&#xff0c;可转债三低为例子 自定义因子实盘的框架 自定义因子轮动框架非常强大 网页 http://120.78.132.143:8023/…

MongoDB~俩大特点管道聚合和数据压缩(snappy)

场景 在MySQL中&#xff0c;通常会涉及多个表的一些操作&#xff0c;MongoDB也类似&#xff0c;有时需要将多个文档甚至是多个集合汇总到一起计算分析&#xff08;比如求和、取最大值&#xff09;并返回计算后的结果&#xff0c;这个过程被称为 聚合操作 。 根据官方文档介绍&…