shell 脚本逻辑运算和参数传递及实战|学习笔记

简介: 快速学习 shell 脚本逻辑运算和参数传递及实战

开发者学堂课程【Linux Shell 编程入门与实战shell脚本逻辑运算和参数传递及实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/551/detail/7623?


shell 脚本逻辑运算和参数传递及实战


内容介绍:

1、只读和位置变量

2 、退出状态

3 、退出状态码

4 、算术运算

5、 赋值

6、 并且与或者

7 、练习

 

1 、只读和位置变量

◆只读变量:只能声明,但不能修改和删除

➢声明只读变量:

readonly name

declare -r name

➢查看只读变量:

readonly -p

◆位置变量:在脚本代码中调用通过命令行传递给脚本的参数

image.png

shift2默认情况下是只可以移动一次,但也可以一次移俩,一次可以向左移一位,想移两位,shift后面加个数字即可。

图片3.png2.png

All arg is  1 2 3 4 5 6

The arge  number is 7

Shift 1

1 st arg is 2

2 st arg is 3

3 st arg is 4

All arg is  1 2 3 4 5 6

The arge  number is 6

Shift 2

1 st arg is 4

2 st arg is 5

3 st arg is 6

$1, $2, ... :对应第1、第2等参数, shift [n]换位置

$0:命令本身

$*:传递给脚本的所有参数,全部参数合为一个字符串

$@:传递给脚本的所有参数,每个参数为独立字符串

$#:传递给脚本的参数的个数

$@ $*只在被双弓|号包起来的时候才会有差异

set --清空所有位置变量


2 、退出状态

进程使用退出状态来报告成功或失败

●0代表成功,1-255代表失败

●$?变量保存最近的命令退出状态

例如:

ping -c1 -W1 hostdown &> /dev/nullecho $?

创建一个用户是否成功,只要看$?结果是否为0就可以,

$?对于脚本来讲,在执行完毕后,也可以判断是否成功失败。

图片3.png11.png

root@centos7 bin #f1.sh

/root/bin/f1.sh: line 12: hostnam:command not founnd

root@centos7 bin # echo $?

root@centos7 bin #0

脚本返回的结果是否为0,是由最后一条命令决定的


3、 退出状态码

◆bash自定义退出状态码

exit [n] :自定义退出状态码

注意:脚本中一旦遇到exit命令 ,脚本会立即终止;终止退出状态取决于exit命令后面的数字

注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码


4 、算术运算

◆bash中的算术运算:help let

+, -,*,/,%取模(取余),**(乘方)

实现算术运算:

(1) tet var=算术表达式

(2) var= $[算术表达式]

(3) var= $((算术表达式))

(4) var= $(expr arg1 arg2 arg3 ..)

注意:expr 是个命令 本身就可以做运算。

#expr 1 + 2

1 + 2   中间有空格是不对的

#expr 3 \* 2

乘号是不可以直接*的

(5) declare-ivar =数值

(6) echo '算术表达式’| bc

◆乘法符号有些场景中需要转义,如*

◆bash 有内建的随机数生成器: $RANDOM ( 0-32767 )

echo $[$RANDOM%50] : 0-49之间随机数


5 、赋值

◆增强型赋值:

+=,-=,*=, /=, %=

◆let varOPERvalue

例如:let count+ =3

自加3后自赋值

◆自增,自减:

let var+= 1

let var++

let var-=1

let var--


6、并且与或者

&并且 and

或者 or

0&0=0

0&1=0

1&0=0

1&1=1

0|0=0

0|1=0

1|0=1

1|1=1

短路与&&

短路或||

0&&0=0

0&&1=0

1&&0=0

1&&1=1

Cmd1&&cmd2

如果cmd1为假,cmd2不需要执行,反之cmd1为真,需要cmd2执行

Cmd1||cmd2

如果cmd1为真,cmd2不需要执行,反之cmd1为假,需要cmd2执行

121.png


7、 练习

1、编写脚本/root/bin/sumid.sh,计算/etc/ passwd文件中的第10个用户和第20用户的ID之和,

图片3.png33.png

注意:写脚本尽可能要简洁,不要重复的写,能充分利用的代码,尽可能用一个来代替,不要重复出现。

2、编写脚本/root/bin/sumspace.sh ,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和。

3、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
108 1
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
60 2
6种方法打造出色的Shell脚本
|
28天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
56 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
49 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
54 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
80 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
71 2
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余