当前位置:网站首页>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执行

未完。。。。。。
边栏推荐
猜你喜欢

Jinshanyun earthquake, the epicenter is in bytes?

Space not freed after TRUNCATE table

Bean life cycle

How do task flow executors work?

Xiaohei leetcode's refreshing rainy day trip, just finished eating Yufei Beef Noodles, Mala Tang and Beer: 112. Path Sum

Flask入门学习教程
2.1.5 大纲显示问题

Flask introductory learning tutorial

论文解读(DropEdge)《DropEdge: Towards Deep Graph Convolutional Networks on Node Classification》

Five Star Holdings Wang Jianguo: Deepen the track with "plant spirit" and promote growth with "animal spirit"
随机推荐
CVPR22 Oral|通过多尺度token聚合分流自注意力,代码已开源
Chatting embarrassing scenes, have you encountered it?Teach you to get the Doutu emoticon package with one click, and become a chat expert
从源码方面来分析Fragment管理中 Add() 方法
JS Deobfuscation - AST Restoration Case
Jinshanyun earthquake, the epicenter is in bytes?
肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
SQLi-LABS Page-2 (Adv Injections)
基于ABP的AppUser对象扩展
Sudoku | Backtrack-7
Evolution of MLOps
Synchronization lock synchronized traces the source
STC8H development (15): GPIO drive Ci24R1 wireless module
Five Star Holdings Wang Jianguo: Deepen the track with "plant spirit" and promote growth with "animal spirit"
Flask入门学习教程
Ehrlich screening method: Counting the number of prime numbers
【EF】 更新条目时出错。有关详细信息,请参见内部异常。[通俗易懂]
Use zeros(), ones(), fill() methods to generate data in TF
TF generates uniformly distributed tensor
Leetcode 93 IP addresses
The kvm virtual machine cannot be started, NOT available, and the PV is larger than the partition