Shell编程入门

一、Shell概述

1.1 Shell的作用

  • Shell是一个基于Linux内核和应用程序之间的一个命令行解释器 它接收应用程序/用户命令 然后调用操作系统内核 由操作系统指挥硬件完成工作
  • Shell还是一个功能相当强大的编程语言(脚本语言),易编写、易调试、灵活性强。
  • Shell属于解释型语言(C、C++是编译型语言;Python、JavaScript、Matlab是解释型语言;Java、C#兼具编译与解释两种特性。)

1.计算机硬件 人类肯定是无法直接和它交流的
在这里插入图片描述

2.这个时候 就需要各种操作系统对硬件进行封装(Linux/Windows)
通过操作系统 去调用硬件来工作
在这里插入图片描述

3.最外层的应用程序 类似于QQ/微信等 才是我们人类操作计算机喜欢的方式
但是我们打开操作这些应用程序 或者说输入ls cd这些命令
操作系统是怎么认识这些命令然后让硬件去执行的呢?
在这里插入图片描述

4.Linux操作系统只认识二进制编码 然后通过二进制编码和硬件交互
所以这个时候Shell的作用就来了
Shell可以看做一个翻译官(命令行解析器)
Shell拿到外部应用程序的指令 会把指令解析成二进制编码
操作系统能看懂这些二进制编码 然后就会去调用硬件来完成相应工作在这里插入图片描述

1.2 Linux提供的Shell解释器

说明Shell解析器本质上也是个命令
命令在Linux中 也就是一个封装好的文件
在这里插入图片描述

1.3 Centos默认的解析器是bash

echo $SHELL
结果是:/bin/bash

二、Shell脚本入门案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、变量

3.1 系统变量

HOME、PWD、SHELL、USER等

3.2 自定义变量

  • 基本语法
    定义变量:变量=值
    撤销变量:unset 变量
    声明静态变量(类似常量):readonly变量 注意:不能unset
    和Java一样 变量都是暂时加载在内存 重启就没了
  • 变量定义规则
    变量名称可以由字母、数字和下划线组成,但是不能以数字开头
    环境变量名建议大写
    等号两侧不能有空格 否则会被当成命令
    在bash中 变量默认类型都是字符串类型 无法直接进行数值运算
    变量的值如果有空格 需要使用双引号或单引号括起来
    export可把变量提升为全局环境变量 可供其他Shell程序使用
    在这里插入图片描述

3.3 特殊变量

$n
在这里插入图片描述

$#
在这里插入图片描述

$*
$@
在这里插入图片描述

$?
检测最后一次执行的命令的返回状态
如果这个变量的值为0,证明上一个命令正确执行
如果这个变量的值为非0(具体是哪个数 由命令自己来决定)则证明上一个命令执行不正确
在这里插入图片描述

四、运算符

$[运算式] 建议用这个
$((运算式))
在这里插入图片描述

五、条件判断

5.1 基本语法

  • test condition
  • [ condition ](注意condition前后要有空格) 常用这个

5.2 常用判断条件

== 字符串比较
-lt 小于(less than)
-le 小于等于(less equal)
-eq 等于(equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
-ne 不等于(Not equal)
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)

-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)

下面是一些案例
在这里插入图片描述

5.3 多条件判断

规则和Java一样
在这里插入图片描述

六、流程控制

6.1 if语句

这里赋权限是为什么 前面二、案列说过了

  • [ 条件判断式 ] 中括号和条件判断式之间必须有空格
  • if后要有空格
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.2 case语句

  • case行尾必须为单词“in” 每一个模式匹配必须以右括号 )结束
  • 双分号 ;; 表示命令序列结束 相当于java中的break
  • 最后的 *) 表示默认模式 相当于java中的default
    在这里插入图片描述
    在这里插入图片描述

6.3 for循环

for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
在这里插入图片描述

for 变量 in 值1 值2 值3…
do
程序
done
在这里插入图片描述

6.4 while循环

while [ 条件判断式 ] 
  do 
    程序
  done
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

七、read读取控制台输入

  • 基本语法:read(选项)(变量名)
  • 选项:
    -p:指定读取值时的提示符
    -t:指定读取值时等待的时间(秒)
  • 变量名:指定读取值的变量名
  • 案例实操
    提示7秒内 读取控制台输入的名称
#!/bin/bash

read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

在这里插入图片描述

八、函数

8.1 系统函数

basename:

  • 基本语法:basename [string / pathname] [suffix]
  • 功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符 然后将剩下的字符串显示出来
  • suffix为后缀 如果suffix被指定了 basename会将pathname或string中的suffix去掉
  • 案例
    截取该/home/atguigu/banzhang.txt路径的文件名称
basename /home/atguigu/banzhang.txt 
# 打印banzhang.txt

basename /home/atguigu/banzhang.txt .txt
# 打印banzhang(这里的.txt就是suffix)

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

# 获取banzhang.txt文件的路径
dirname /home/atguigu/banzhang.txt 
/home/atguigu

8.2 自定义函数

  • 基本语法
#定义函数
[ function ] funname[()]
{
	Action;
	[return int;] #只能返回int类型
}
#调用函数
funname

#定义函数可以化简 把[]全都去掉:
 function  funname()
{
	Action;
	return int;
}
  • 必须在调用函数地方之前 先声明函数 shell脚本是逐行运行 不会像其它语言一样先编译
  • 函数返回值 只能通过$?系统变量获得
  • 可以显示加return返回 如果不加 将以最后一条命令运行结果 作为返回值
  • return后跟数值n(范围是0-255) 如果return 300 返回值是300%256=44

案例:

# 计算两个输入参数的和
# [atguigu@hadoop101 datas]$ touch fun.sh
# [atguigu@hadoop101 datas]$ vim fun.sh

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

[atguigu@hadoop101 datas]$ chmod 777 fun.sh
[atguigu@hadoop101 datas]$ ./fun.sh 
Please input the number1: 2
Please input the number2: 5
7

在这里插入图片描述

在这里插入图片描述
如何改进结果是88的错误情况?
在这里插入图片描述
在这里插入图片描述

九、正则表达式入门

9.1 是什么

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
在很多文本编辑器里 正则表达式通常被用来检索、替换那些符合某个模式的文本
在Linux中 grep,sed,awk等命令都支持通过正则表达式进行模式匹配

9.1 常规匹配

一串不包含特殊字符的正则表达式匹配它自己 如:
cat /etc/passwd | grep at
就会匹配所有包含at的行

9.2 常用特殊字符

在这里插入图片描述
^$ 匹配出的内容就是空行


在这里插入图片描述
.*匹配的内容就是所有结果 0个或者多个的任意字符不就是所有内容


在这里插入图片描述
[a,b,c]*就表示匹配这三个字母出现0次或者多次


在这里插入图片描述

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值