菜鸟学Linux 第014篇笔记 bash脚本(变量,变量类型)

简介:

菜鸟学Linux 第014篇笔记 bash脚本(变量,变量类型)



上一节忘记讲了,sorry 还有一个命令fgrep

此命令是fast grep=grep -F 快速搜索文本,该命令不可以使用正则表达式,

如果有包含正则表达式的字符,直接当字符去匹配。


Shell编程


编程语言:机器语言、汇编语言、高级语言


高级语言:

静态语言:编译型语言

强类型(变量) 强:变量在使用前,必须事先声名,甚至还需要初始华; 强:变量在使用前,必须事先声名,甚至还需要初始华;

关键字:

执行时要事先转换成可执行格式,而动态语言的解释器则是由静态语言所编写而成

属于静态语言的: C、 C++、 JAVA、 C#、 ...

动态语言:解释型语言

通常弱类型 弱:变量不需要声名(不区分类型)

执行时边解释边执行

属于动态语言: ASP、 ASP.net、 PHP、 SHELL、 python、 perl ...


编程模型

面向过程 shell、 C

就是把编程的着眼点、立足点主要在于问题解决过程本身。(适合开发小型程序)

Linux 内核是使用面向过程的C语言研发的

面向对象 JAVA(纯面向对象), Python, perl(两者都有), C++

把整个我们要实现的项目、抽象成一个个对象、并且定义对象之间的动作

(可发出的操作)来完成。这样的风格适合开发大型应用程序。



变量:内存空间,命名

变量类型:事先定义数据的存储格式和长度

字符型

数值型

整  型:11

浮点型:11.23   1.123*10^1   0.1123*10^2

时间型

布尔型true 1 false 0



内存:编址的存储单元


进程:



逻辑运算:与、或、非、异或

1:真

0:假

与运算:&& and 

1&&0=0

0&&1=0

0&&0=0

1&&1=1

或运算:or

1||0=1

0||1=1

0||0=0

1||1=1

非运算:not

!true = false

! false =true

异或:

1 0=1

0 1=1

0 0=0

1 1=0

短路运算

与:只要有一个为假,结果一定为假;

或:只要有一个为真,结果一定为真;


        变量赋值: VAR_NAME=value


bash变量类型:

环境变量

本地变量(局部变量)

位置变量

特殊变量

本地变量:

作用域:整个bash进程

VARNAME=VALUE

局部变量:

作用域:当前代码段

local VARNAME=value

环境变量:

作用域:当前shell进程及其子进程(如果重新登录一个shell则无效)

export VARNAME=value; 

也可以先定义VAR_NAME=value then export VAR_NAME

位置变量:

$1, $2, ...      表示引用某个变量

特殊变量:

$?: 上一个的执行状态返回值

程序执行时,可能有两类返回值:(0-255)

程序执行结果

程序状态返回代码

0 正确执行

1-255 错误执行   系统预留代码1,2,127

使用输出重定向技巧

>

>>

2>

2>>

&>

/dev/null: 软件设备 bit bucket 数据黑洞

id student &> /dev/null

撤消变量:

unset VAL_NAME

查看当前shell中变量:set (包含环境变量和本地变量)

查看当前shell环境变量: printenv (print environment) env export

追加变量:

ANIMALS=pig

ANIMALS=$ANIMALS:pig ANIMALS=pig$ANIMALS

export PATH=$PATH:/usr/local/apache/bin

PATH=/usr/local/mysql/bin:$PATH

shell变量默认是字符串,不可以做算术运算

脚本在执行时会启动一个子shell进程

命令行中启动的脚本会继承当前shell环境变量;

系统自动执行的脚本(非命令行启动)需要自我定义需要各环境变量

bash: 变量是进程的变量,如果进程结束,则变量清除;

且父shell声名变量,子shell无法调用,反之亦然;


引用变量: ${VAR_NAME} 括号有时可省略

查看变量 echo $VAR_NAME

'' 单引号不执行变量替换

"" 双引号可执行变量替换


写脚本

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的

shebang:魔数 #!/bin/bash

含义:因为linux内核只能识别elf可执行文件,而脚本是一个文本文档

如果想要其执行,必须使用解释器,而上边#!/bin/bash则表示文件要执行,

用bash解释器来解释文本里包含的执行命令

#表示注释行,不执行



练习:

练习写脚本,使其完成以下任务

脚本1

1、添加5个用户,user1,...,user5

2、每个用户的密码同用户名,而且要求,添加密码完成后不显示命令的执行结果信息

3、每个用户添加完成后,都要显示“用户某某添加成功信息”

脚本2

1、使用一个变量保存一个用户名;

2、删除此变量中的用户且一并删除其家目录;

3、显示用户“删除完成”类的信息;




key:

script 1:(初学编写,有待优化,见谅)

#!/bin/bash

S=student

T1=${S}1

T2=${S}2

T3=${S}3

useradd -M $T1

echo $T1 | passwd --stdin $T1 &> /dev/null

echo $?

echo "User $T1 have added"

我只添加的一段,其它用户的类似

script 2:

#!/bin/bash

S=student

T1=${S}1

T2=${S}2

T3=${S}3

rm -f /var/mail/$T1

userdel $T1

echo "User $T1 have deleted"

初次编写脚本错误经验

1、变量起名时不用加$

2、引用变量时后边有其它文本时用${VAL_NAME}而不是{$name}

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1861891如需转载请自行联系原作者


Winthcloud

相关文章
|
25天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
29天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
42 1
|
2月前
|
Devops 关系型数据库 大数据
1000个开源免费的bash脚本合集
【10月更文挑战第4天】
|
关系型数据库 MySQL Shell
【Linux命令】-bash: mysql: command not found
【Linux命令】-bash: mysql: command not found
140 0
|
Shell Linux
Linux pip命令报错 -bash: pip: command not found
Linux pip命令报错 -bash: pip: command not found
360 0
|
Linux
LINUX用户执行过的命令,保存在.bash_history
LINUX用户执行过的命令,保存在.bash_history
99 0
|
Shell Linux
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
136 0
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
|
Linux
LINUX用户执行过的命令,保存在.bash_history
LINUX用户执行过的命令,保存在.bash_history
154 0
|
Shell Linux 网络协议