当前位置:网站首页>shell学习
shell学习
2022-08-09 21:54:00 【StudyWinter】
1 shell概述
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

Shell还是一个功能相当强大的编程语言,易编写易调试、灵活性强。
2 Shell解析器
(1)Linux提供的Shell解析器有:(环境ubuntu20.4)
cat /etc/shells
(2)ubuntu默认的解析器是bash
echo $SHELL
3 shell脚本入门
1.脚本格式
脚本以#!/bin/bash开头(指定解析器)
2.第一个Shell脚本:helloworld
(1)需求:创建一个Shell脚本,输出helloworld
(2)案例实操:
vim helloworld.sh
在helloworld.sh中输入如下内容
#!/bin/bash
echo "helloworld"
(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)

第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
(a)首先要赋予helloworld.sh 脚本的+x权限

注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
3.第二个Shell脚本:多命令处理
(1)需求:
在当前目录下创建一个1.txt,在1.txt文件中增加“Hello Hello”。
vim batch.sh
在batch.sh中输入如下内容
#!/bin/bash
touch 1.txt
echo "Hello Hello" >>cls.txt

结果

4 shell中的变量
4.1 系统变量
1. 常用系统变量
$HOME、$PWD、$SHELL、$USER等
2.案例实操
(1)查看系统变量的值

(2)显示当前Shell中所有变量:set
数据很多,我把它输出到文件中了

4.2 自定义变量
1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格。
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
3.案例实操
(1)定义变量A

(2)给变量A重新赋值

(3)撤销变量A

(4)声明静态的变量B=2,不能unset,不能修改

(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

(6)变量的值如果有空格,需要使用双引号或单引号括起来

(7)可把变量提升为全局环境变量,可供其他Shell程序使用
假定我们在其他shell中要使用变量E。

执行

发现并没有打印输出变量B的值。使用export即可(没测试)
export E4.3 特殊变量:$n
1.基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
类似c/c++中main函数的参数argc和argv
2.案例实操
(1)输出该脚本文件名称、输入参数1和输入参数2 的值

执行

4.4 特殊变量:$#
1.基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.案例实操
(1)获取输入参数的个数

执行

4.5 特殊变量:$*、[email protected]
1.基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
[email protected] (功能描述:这个变量也代表命令行中所有的参数,不过[email protected]把每个参数区分对待)
2.案例实操
(1)打印输入的所有参数

执行

4.6 特殊变量:$?
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2.案例实操

5 运算符
1.基本语法
(1)“$((运算式))”或“$[运算式]”
(2)expr + , - , \*, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
2.案例实操:
(1)计算3+2的值
法1:

法2:

(2)计算(2+3)X4的值
法1
expr `expr 2 + 3` \* 4这个`是ESC下方的符号,先计算2+3,再计算×4

法2:

注意:
“$((运算式))”:在(())中书写要计算的表达式
“$[运算式]”:在[]中书写要计算的表达式
6 条件判断
1.基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。
2. 常用判断条件
(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)
3.案例实操
(1)23是否大于等于22

(2)test.sh是否具有写权限

(3)目录中的文件是否存在

(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
正常的与或非处理就行,注意短路、断路。
7 流程控制(重点)
7.1 if判断
1.基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格;
(2)if后要有空格。
2.案例实操
(1)输入一个数字,如果是1,则输出hello,如果是2,则输出world,如果是其它,什么也不输出。
#########################################################################
# File Name: test1.sh
# Author: Winter
# Created Time:2022年08月09日 星期二 21时17分06秒
#########################################################################
#!/bin/bash
if [ $1 -eq 1 ];then
echo "hello"
elif [ $1 -eq 2 ]
then
echo "world"
fi执行

7.2 case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于c/c++/java中的break。
- 最后的“*)”表示默认模式,相当于c/c++/java中的default。
2.案例实操
(1)输入一个数字,如果是1,则输出hello,如果是2,则输出world,如果是其它,输出winter。
#########################################################################
# File Name: test2.sh
# Author: Winter
# Created Time:2022年08月09日 星期二 21时25分44秒
#########################################################################
#!/bin/bash
case $1 in
"1")
echo "hello"
;;
"2")
echo "world"
;;
*)
echo "winter"
;;
esac执行

未完。。。。。。
边栏推荐
- 聊聊SQL语句中 DDL 、DML 、DQL 、DCL 分别是什么
- AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
- AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
- TF生成均匀分布的tensor
- np中的round函数,ceil函数与floor函数
- 宝塔实测-搭建LightPicture开源图床系统
- Converting angles to radians
- Xiaohei's leetcode journey: 94. Inorder traversal of binary trees (supplementary Morris inorder traversal)
- 台风生成,广州公交站场积极开展台风防御安全隐患排查
- 2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
猜你喜欢
2.1.5 大纲显示问题
![[Cloud Native] 4.2 DevOps Lectures](/img/d0/2cd32351234401fdfecd3a829a639d.png)
[Cloud Native] 4.2 DevOps Lectures

Pagoda measurement - building LightPicture open source map bed system

JS Deobfuscation - AST Restoration Case
![[Implementation of the interface for adding, deleting, checking, and modifying a double-linked list]](/img/49/ebedcd4d27aa608360ac17e504f36d.png)
[Implementation of the interface for adding, deleting, checking, and modifying a double-linked list]

从源码方面来分析Fragment管理中 Add() 方法

ACM MM 2022 | Cloud2Sketch: Painting with clouds in the sky, AI brush strokes

APP自动化测试框架-UiAutomator2基础入门

简单问题窥见数学

一本通2074:【21CSPJ普及组】分糖果(candy)
随机推荐
laravel table migration error [easy to understand]
Shanghai Konan SmartRocket series product introduction (3): SmartRocket iVerifier computer interlocking system verification tool
埃氏筛选法:统计素数个数
Liver all night to write a thirty thousand - word all the commands the SQL database, function, speaks clearly explain operators, content is rich, proposal collection + 3 even high praise!
一本通2074:【21CSPJ普及组】分糖果(candy)
js十五道面试题(含答案)
PHP 2D array sorted by a field
2022年中国第三方证券APP创新专题分析
Domestic mobile phone manufacturers once fought for it, but now it is the first to collapse...
np中的round函数,ceil函数与floor函数
Activiti7审批流
从产品角度看 L2 应用:为什么说这是一个游乐场?
万字总结:分布式系统的38个知识点
深度剖析 Apache EventMesh 云原生分布式事件驱动架构
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
台风生成,广州公交站场积极开展台风防御安全隐患排查
用户代码未处理MetadataException
金山云地震,震源在字节?
Blender程序化建模简明教程【PCG】
Under the NVM node installation;The node environment variable configuration