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目录中共有多少个一级子目录和文件

相关文章
|
14天前
|
移动开发 监控 安全
【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率
构建嵌入式远程Shell的文章概述: - 目标:解决嵌入式软件测试中的远程调试难题,提供轻量级解决方案。 - 功能:包括远程交互、命令执行与反馈,强调多客户端并发连接和稳定性。 - 设计:基于Socket服务端架构,使用I/O多路复用和popen函数,确保命令执行与结果反馈。 - 需求:支持命令解析、执行和结果回传,考虑网络不稳定情况下的连接保持。 - 安全性:仅限内部调试,未详细讨论加密等安全措施。 - 实现:关注点在Socket服务端程序,包括监听、数据过滤和命令处理。 - 测试:通过 Telnet 和Windows网络助手验证连接和命令执行功能。
267 54
|
2天前
|
Shell
蓝易云 - 简单shell脚本的编写教程
以上就是编写一个基本Shell脚本的步骤。当然,Shell脚本可以做的远不止这些,你可以使用变量,控制结构(如if语句和循环),以及各种Shell命令和功能来编写更复杂的脚本。
11 1
|
13天前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
17天前
|
Shell
shell脚本
shell脚本
18 2
|
2天前
|
Shell 调度
Shell脚本中的if条件判断语句
Shell脚本中的if条件判断语句
|
3天前
|
Shell
蓝易云 - 简单shell脚本的编写教程
以上就是编写一个基本Shell脚本的步骤。当然,Shell脚本可以做的远不止这些,你可以使用变量,控制结构(如if语句和循环),以及各种Shell命令和功能来编写更复杂的脚本。
4 0
|
25天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
35 2
|
3天前
|
机器学习/深度学习 Unix Java
技术笔记:Linux之Shell脚本编程(一)
技术笔记:Linux之Shell脚本编程(一)
|
6天前
|
Shell
Shell脚本之条件语句if总结
Shell脚本之条件语句if总结
|
16天前
|
Shell Linux Python
Shell 数学计算:轻松掌握算术运算基本功
在Shell脚本中进行数学计算需借助特定方法。`(())`用于高效整数运算,如`((1+1))`,而`bc`处理小数,如`echo "3.14 + 2.86" | bc`。`let`与`(())`相似,`expr`较繁琐,`declare -i`仅限基础整数运算。使用`bc`时,`scale`定义小数精度。通过这些工具,Shell脚本也能实现复杂的数学计算。
18 0