Linux:Day6(上) egrep、条件测试
egrep及扩展的正则表达式:
egrep = grep -E
扩展正则表达式的元字符:
或者:a | b
练习:
1、显示当前系统root、centos或user1用户的默认shell和UID;
2、找出/et/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
3、使用echo输出一个路径,使用egrep取出基名;(整个路径的最后一个名称)
4、找出ifconfig命令结果中1-255之间的数值;
5、找出ifconfig命令结果中的IP地址;
注意:在使用或的时候会有很多坑,一定要小心,拿这题举例:
【1】匹配1-255之间的数字。
错:\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}\> # 由于或的存在,锚定词首只对第一个有效,锚定词尾只对最后一个选择有效。
对:\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\> # 在一个符号多次出现的时候,没必要一个一个加,只要在外面加括号就可以了。
【2】匹配1-255数字加一个点。
(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\.){3}
【3】匹配IP地址
错:(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\.){3}\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2} # 由于后面或没加括号,这样就连带前面所有一起或了。
对:(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\.){3}\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})
fgrep:不支持正则表达式搜索;
bash的基础特性(4)
变量类型:
数据存储格式 、存储空间大小、参与运算各类;
字符型
数值型 :
整型
浮点型
强类型:定义变量时必须指定类型、参与运算必须符合类型要求
弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;
bash中的变量的种类:
根据变量的生效范围等标准:
本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;
环境变量:生效范围为当前shell进程及其子进程;
局部变量:生效范围为当前shell进程中某代码片断(通常指函数);
位置变量:$1, $2, ...来表示,用于让脚本在脚本代码 中调用通过命令行传递给它的参数;
特殊变量:$?, $0, $*, $@, $#
本地变量:
变量赋值:name="value"
可以使用引用:
value:
(1) 可以是直接字串:name="username" 注:变量赋值的=号前号不能有空格,不然shell会把变量名当命令执行,然后报command not found这个错误,这个和Python不太一样。另外VALUE值中如果没空格,引号也可以不用加。
(2) 变量引用:name="$username"
(3) 命令引用:name=`COMMAND`,name=$(COMMAND) 就是将一个命令的执行结果赋值给一个变量,推荐第2种方法。
变量引用:${name}, $name
" ":弱引用,其中的变量引用会被替换为变量值;
‘ ’:强引用,其中的变量引用不会被替换为变量值,而保持原来字符串;
显示已定义的所有变量
set
销毁变量:
unset name 注:变量名前不用加$
环境变量:
变量声明、赋值;
export name=VALUE
declare -x name=VALUE
示例:(1) 直接定义一个环境变量:
declare -x num1=3
(2) 将 一个本地变量导出为环境变量:
num2=5
declare -x num2
变量引用:$name,$(name)
显示所有环境变量:
export
env
printenv
销毁:
unset name
bash有许多内建的环境变量:PATH,SHELL,UID,HISISIZE,HOME,PWD,OLD,HISFILE,PS1
变量命令法则:
1、不能使用程序中的保留字;
2、只能使用数字、字母及下划线,且不能以数字开头;
3、见名识义;
只读变量:不能变改值,不能被销毁,只能等到shell进程终止时随之销亡。
readonly name
declare -r name
位置变量:
在脚本代码中调用通过命令行传递给脚本的参数;
$1,$2,....;对应调用第1、第2个参数
$0:命令本身;
$*:传递给脚本的所有参数;调用时将传递给脚本的所有参数当一个字符串;
$@:传递给脚本的所有参数;将传递给脚本的每一个参数当一个独立的字符串;
$#:传递给脚本的参数的个数;
示例:
[root@localhost bin]# ./posvar.sh tom jerry obama
./posvar.sh
jerry
$*:tom jerry obama
$@:tom jerry obama
$#:
轮岗操作:shitf +[n]
[root@localhost bin]# nano posvar.sh
#!/bin/bash
echo $
shift 注:踢掉一个。
echo $
shift 注:踢掉两个
echo $
echo "\$*:$*"
echo "\$@:$@"
echo "\$#:$#"
----------------------------------------------------------------
[root@localhost bin]# ./posvar.sh tom jerry obama blair
tom
jerry
blair
$*:blair
$@:blair
$#:
bash的配置文件:
按生效范围划分,存在两类:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
按功能划分,存在两类:
profile类:为交互式登录的shell提供配置;
全局:/etc/profile,/etc/profile.d/*.sh
个人:~/.bash_profile
功用:
(1)用于定义环境变量;
(2)运行命令或脚本;
bashrc类:为非交互式登录的shell提供配置;
全局:/etc/bashrc
个人:~/.bashrc
功用:
(1)定义命令别名;
(2)定义本地变量;
shell登录:
交互式登录:
直接通过终端输入账号密码登录;
使用:su -UserName 或su -l UserName 切换的用户
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:
su UserName
图形界面下打开的终端
执行脚本
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置的生效方式:
(1)重新启动shell进程;
(2) 使用source或.命令进程;
问题:
1、定义对所有用户都生效的别名?
2、让用户的PATH环境变量的值多出一个路径,例如多加/usr/local/apache2/bin
bash中的算术运算:
+,-,*,/,%,**
实现算术运算:
(1)let var=算术表达式
(2)var=$[算术表达式]
(3)var=$((算术表达式))
(4)var=$(expr arg1 arg2 arg3 ....) 例如:mul2=$(expr $num1 \* $num2)
乘法符号有些场景中需要转义;
bash有内建的随机数生成器:$RANDOM 例如:echo $[$RANDOM%60+1]
增强型赋值:
+=,-=,*=,/=,%=
let varOPERvalue
例如:let count+=1
自增,自减:
let var+=1
let var++
let var-=1
let var--
练习1:写一个脚本
计算/etc/passwd文件中的第10个用户和第20用户之ID之和;
练习2:写一个脚本
传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和;
条件测试:
判断某需求是否满足,需要由测试机制来实现;
Note:专用的测试表达式需要由测试命令辅助完成测试过程;
测试命令:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Note:EXPRESS前后必须有空白字符,写的时候容易忘记,提示命令不存在;
bash的测试类型:
数值测试:
-gt:不否大于;
-ge:是否大于等于;
-eq:是否等于;
字符串测试:
==:是否等于;
>:是否大于;
<:是否小于;
!=:是否不等于;
~=:左侧字符串是否能够被右侧的PATTERN所匹配;
Note:此表达式一般用于[[ ]]中;
-z "STRING”:测试字符串是否为空,空则为真,不空则为假;
-n "STRING":测试字符是否不空,不空则为真,空则为假;
Note:用于字符串比较时用到的操作数都应该使用引号;
文件测试
bash自定义退出状态码
exit [n]:自定义退出状态码;
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字;
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;
练习:写一个脚本
接受一个文件路径作为参数;
如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;
如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数;
Linux:Day6(上) egrep、条件测试的更多相关文章
- linux基础09-bash编程(条件测试和特殊变量)
(1)整数测试 INT1=63 INT2=77 [ $INT1 -eq $INI2 ] [[ $INT1 -eq $INT2 ]] test $INT1 -eq $INT2 文件测试: -e FILE ...
- 第二十篇 Linux条件测试语句相关知识点介绍
条件测试语句的格式如下: [ 条件表达式 ] # 条件表达式两侧各有一个空格 按测试对象不同,条件测试语句共分为4中类型: 文件测试语句 逻辑测试语句 整数值比较语句 字符串比较语句 ...
- 【Linux】【Shell】【Basic】条件测试和变量
bash脚本编程 脚本文件格式: 第一行,顶格:#!/bin/bash 注释信息:# 代码注释: 缩进,适度添加空白行: ...
- Linux Shell 03 条件测试
条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...
- 在Linux系统上利用Tomcat搭建测试环境
第一歩:查看Linux系统的IP地址. 输入命令:ifconfig 第二歩:WinSCP工具 1.下载WinSCP工具,便于文件直接从windows系统直接拖动到Linux系统中,图形化创建文件夹等. ...
- linux shell编程(二) 条件测试
bash中常用的条件测试有三种 条件测试的表达式:[ expression ] [[ expression]] 第一种:整数测试: -eq 测试两个整数是否相等,比如[ $A -eq $B ] -n ...
- linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句
条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础 test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...
- Shell编程-条件测试 | 基础篇
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...
- Linux互斥锁、条件变量和信号量
Linux互斥锁.条件变量和信号量 来自http://kongweile.iteye.com/blog/1155490 http://www.cnblogs.com/qingxia/archive/ ...
随机推荐
- JavaScript初学者必看“箭头函数”
译者按: 箭头函数看上去只是语法的变动,其实也影响了this的作用域. 原文: JavaScript: Arrow Functions for Beginners 译者: Fundebug 为了保证可 ...
- JS与CSS阻止元素被选中及清除选中的方法总结
有时候,我们希望阻止用户选中我们指定区域的文字或内容. 举个栗子,有时候用户在一个区域执行频繁的点击操作,一不小心傲娇地点多了,就会选中当前区域的内容. 再举个栗子,制作轮播组件的时候,点击下一页,若 ...
- Javascript URI 解析介绍
URI 在维基百科中对于URI的解释是这样子的: 在计算机术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识 ...
- vue.js插入dom节点的方式
html代码: <div id="app"></div> js代码: var MyComponent = Vue.extend({ template: '& ...
- nginx中有关 root 和 alias的主要区别
举个例子给伙伴们区别就明显看出来了,例子如下: location /img/ { alias /var/www/image/; }注意:如果按照上述配置的话,则访问/img/目录里面的文件时,ning ...
- RPC框架学习总结
1.RPC是一种技术框架的称呼,不是某种具体协议,不局限于某种协议,RPC顾名思义就是远程过程调用,其核心思想是,RPC客户端调用远程服务器上的接口完成过程调用,远程服务器把结果返回. 2.RPC的最 ...
- iOS ---------- 获取设备的各种信息
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...
- RPC理论以及Dubbo的使用介绍
RPC 的主要功能目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. RP ...
- Ubuntu快捷键、Ubuntu终端常用命令
Ubuntu快捷键 0.Ctrl + Alt + t 打开终端,在终端命令行操作 1. Ctrl + W: 关闭当前 Nautilus 窗口 2. Ctrl+T: 在 Nautilus 打开新的 Ta ...
- 键盘ascll码表
键盘ascll码表-自用