菜鸟学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:
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