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:$2echo '================$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 "$*"
doecho $para
doneecho '==================$@====================='
for para in "$@"
doecho $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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入pandas:数据分析

目录 前言 第一点&#xff1a;导入模块 第二点&#xff1a;准备数据 第三点&#xff1a;简单的分析数据 第四点&#xff1a;【重点】数据透支 总结 前言 在数据分析与挖掘的领域&#xff0c;了解如何使用工具和方法来探索数据是至关重要的。本文将探讨如何利用Python中的…

MAB规范(1):概览介绍

前言 MATLAB的MAAB&#xff08;MathWorks Automotive Advisory Board&#xff09;建模规范是一套由MathWorks主导的建模指南&#xff0c;旨在提高基于Simulink和Stateflow进行建模的代码质量、可读性、可维护性和可重用性。这些规范最初是由汽车行业的主要厂商共同制定的&…

如何使用宝塔面板搭建Tipask问答社区网站并发布公网远程访问

文章目录 前言1.Tipask网站搭建1.1 Tipask网站下载和安装1.2 Tipask网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试4.结语 前…

FreeRTOS基础(四):静态创建任务

上一篇博客&#xff0c;我们讲解了FreeRTOS中如何动态创建任务&#xff0c;那么这一讲&#xff0c;我们从实战出发&#xff0c;规范我们在FreeRTOS下的编码风格&#xff0c;掌握静态创建任务的编码风格&#xff0c;达到实战应用&#xff01; 目录 一、空闲任务和空闲任务钩子…

MT8781安卓核心板_MTK联发科Helio G99核心板规格参数

MT8781安卓核心板采用先进的台积电6纳米级芯片生产工艺&#xff0c;配备高性能Arm Cortex-A76处理器和Arm Mali G57 GPU&#xff0c;加上LPDDR4X内存和UFS 2.2存储&#xff0c;在处理速度和数据访问速度上都有着出色的表现。 MT8781还支持120Hz显示器&#xff0c;无需额外的DSC…

TK防关联引流系统:全球TikTok多账号运营的神器

在TikTok的生态中&#xff0c;高效运营多个账号已成为品牌全球推广的必经之路。为此&#xff0c;TK防关联引流系统应运而生&#xff0c;它是一款专为TikTok设计的效率神器&#xff0c;助您迅速搭建并管理全球多账号矩阵。该系统由先进的“防关联智能终端”硬件和智能的“TK防关…

随身wifi网络卡顿怎么解决?随身WiFi哪个牌子的最好用?排名第一名的随身WiFi!

对于随身wifi靠不靠谱这个问题&#xff0c;网上一直存在争议。很多人的随身wifi网速不稳定&#xff0c;信号看着满格就是上不了网。关于随身wifi卡顿到底该怎么解决呢&#xff1f; 1.如果是设备网络在一个地方上网速度很快&#xff0c;换一个地方网络就不行了&#xff0c;很可能…

常用中间件各版本下载

常用中间件下载地址 前言分布式中间件负载均衡中间件缓存中间件数据库中间件其他中间件1、Maven下载地址2、Git下载地址2、JDK下载地址3、MySQL下载地址4、Redis下载地址5、Nacos下载地址6、Tomcat下载地址7、Nginx下载地址8、RocketMQ下载地址8、RabbitMQ下载地址8、Erlang下载…

新设立湖北投资管理公司流程和要求

在湖北投资管理企业进行注册时&#xff0c;需要准备一系列的材料并按照一定的流程进行办理。本文将从注册材料及注册流程两方面来介绍&#xff0c;帮助您了解注册投资管理企业的步骤和所需的具体材料。详情致电咨询我或者来公司面谈。 新注册材料要求: 企业名称申请书:要求提供…

Day 9:2829. k-avoiding 数组的最小总和

Leetcode 2829. k-avoiding 数组的最小总和 给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组&#xff0c;如果其中不存在任何求和等于 k 的不同元素对&#xff0c;则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 n 个不同正整数的最…

树形结构-CRUD接口

先看一下效果&#xff1a;整体的效果 新增效果 --默认值是 default 修改效果 - 大致效果如上 --------------------------------------------------------------------------------------------------------------------------------- 下面讲解代码如何实现的 根据你使用…

Selenium+Java 环境搭建

selenium 介绍 Selenium 是 web 应用中基于 UI 的自动化测试框架&#xff0c;支持多平台、多浏览器、多语言。 早期的 selenium RC 已经被现在的 webDriver 所替代&#xff0c;可以简单的理解为selenium1.0webdriver 构成 现在的 Selenium2.0 。现在我们说起 selenium &#xf…

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

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

【机器学习300问】106、Inception网络结构如何设计的?这么设计的目的是什么?

谷歌的Inception网络&#xff0c;也被称为GoogLeNet&#xff0c;是Google在2014年推出的一种深度卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;在这之前的AlexNet、VGG等结构都是通过增大网络的深度&#xff08;层数&#xff09;来获得更好的训练效果&#xff0c;但…

vue3简单快速实现主题切换功能

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《vue3实战》 目录 内容概要 实现步骤 1.定义不同主题的css样式变量 2.入口main.ts中引入这个样式文件 3.主题样式css变量引用 4.设置默认主题样式 5.实现点击按钮主题切换 总结 最近发现了一个巨牛的人工智…

JS-Lodash工具库

文档&#xff1a;Lodash Documentation orderBy函数&#xff1a;根据条件进行排序 注&#xff1a;第一个是要排序的数组&#xff0c;第二个是根据什么字段进行排序&#xff0c;第三个是排序的方式&#xff08;desc倒序&#xff09; 安装方式&#xff1a;Lodash npm i lodash…

python判断文件是否存在

import os test_path "/Users/yxk/Desktop/test/GrayScale.tif" if(os.path.exists(test_path)):print(文件存在&#xff01;&#xff01;&#xff01;&#xff01;) else:print("文件不存在&#xff01;&#xff01;&#xff01;&#xff01;")结果如下 …

ABAP 借助公司封装的钉钉URL,封装的RFC给钉钉发送消息

FUNCTION ZRFC_BC_SMSSEND_DINGTALK. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" VALUE(DESTUSRID) TYPE CHAR255 *" VALUE(CONTENT) TYPE CHAR255 *&quo…

Linux 的权限

目录 Linux 的用户 root 用户 和 普通用户 如何新建普通用户&#xff1f; 如何切换用户&#xff1f; 一开始是以 root 用户登录&#xff1a; 一开始以普通用户登录&#xff1a; 如何删除用户&#xff1f; Linux文件权限 什么是读权限&#xff08; r &#xff09;&#…

自然语言处理学习路线

学习目标 NLP 系统知识&#xff08;从入门到入土&#xff09; 学习内容 NLP的基本流程&#xff1a;&#xff08;待更&#xff09;文本预处理&#xff08;标点符号处理、繁体转简体、分词Tokenizer&#xff09;&#xff1a;&#xff08;待更&#xff09;词袋模型&#xff08;TF…