知识点小结~2
一、变量
1、环境变量
普通变量:VAR=value;临时环境变量:export VAR=value
shell进程的普通变量作用域是shell进程,当export导入到系统变量时,则作用域时shell进程及其shell子进程。【${#变量}:为变量字符串长度;${变量:起始位置:切片长度};】
2、变量的设定规则:
(1)变量与变量的内容以一个等号来链接;
(2)等号两边不能直接接空格符;
(3)变量名称只能是数字和字母,但是开头字符不能是数字;
(4)变量内容若有空格可使用双引号“”或单引号将变量内容结合起来
双引号内的特殊字符,可以保持原本特性;
单引号内的特殊字符仅为一般字符;
3、实现运算:(其中的变量不用加$)
(1) let var=算术表达式
(2) var=$[算术表达式]
(3) var=$((算术表达式))
var=$(expr 表达式们)表达式之间需要使用空格分隔
$[] 和$(()):在其中进行算数运算,变量前的$符可以省略掉。
[ ]内部(前后都要有空格)变量使用""引起来,可以避免变量未被定义时为空(等价于变量缺失)带来的其他麻烦。
[[]]内部(前后都要有空格)支持扩展的正则表达式,适用于需要扩展正则表达式判断时使用,一般情况下使用[]即可。(=~)后面筛选的条件直接写即可,不需要使用“”或‘'括起来,否则会错误。
4、数值比较:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
5、字符串比较:
= 是否等于(也可用 == )已验证
> ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
-z "STRING“ 字符串是否为空,空为真,不空为假 可以这样理解:-zero:空位真,不空为假
-n "STRING“ 字符串是否不空,不空为真,空为假 也可理解为:-not zero:不为空真,为空假
注意:用于字符串比较时的用到的操作数都应该使用引号
6、()与{}变量传递
()开启的子进程与bash命令开启的子进程不同,在()内开启的子进程会继承其父进程定义的变量,但如果()内有与该变量同名的变量,则从父进程继承来的变量便会被覆盖,以()内的变量为准,()开启的子进程执行完其中语句后进程自动结束,其中的变量也会被释放。管道命令也会开启子进程,管道后的命令进程执行完毕后自动结束,与()相类似,而{}不会开启子进程。{}与()相比,除前后都需要加空格外,{}中每条命令后面都需要加;()中最后一条命令后不需要加;。例如:(cmd1;cmd2;cmd3) ,{ cmd1;cmd2;cmd3;} 。
7、read命令输入变量
read -p "input" INPUT 等价于echo -e "input\c" INPUT=$1
read -n 5 name :在给name进行输入时只允许输入5个字符,读满5个后自动退出。
read -d C name :C为输入结束标志符,在读到C字符后,输入结束,name变量中不包含C字符。
read -t 3 name:在为name变量输入值时,等待3秒。
read命令也支持多变量输入,以空格分隔开。
只读变量 readonly 或 declare -r 定义只读变量。只读变量不能使用unset命令释放,exit退出即可。
二、文件查找与压缩打包
1、通过whereis -l来查看执行whereis命令时所查找的文件夹。
whereis 主要是针对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page文件,跟几个比较特定的目录来处理而已。
2、whatis 搜索主要依赖于数据库使用,数据库makewhatis或mandb命令生成。
3、locate(查找文件)同样依赖于数据库,数据库使用updatedb命令,根据/etc/updaetdb.conf的设定去搜索系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件。
4、find命令各项参数():
find /etc -newer /etc/passwd:在etc下找出比/etc/passwd更新的文件。
find(查找文件)命令:使用 -7000 表示只要至少同时含有 ---s--s--t (每一位数字代表的权限均为且的关系)的所有三个权限。而只需要至少有任意一个权限,就是 /7000 +7000(centos7上已经不支持+7000搜索)(每一位数字代表的权限均为或的关系),虽然s、s、t占用了x位但计算权限数值示仍要计算x。
5、find 执行额外命令格式:
find 文件目录 选项 条件 -exec 额外命令 {} \;例如:find / -perm /7000 -exec ls -l {} \;{}代表的是由find找到的内容,会将find找到的内容放到{}内;-exec一直到\;是关键词,代表find的额外动作;由于;在bash环境下是有特殊意义,因此利用\来转义。
find 目录 -mtime -4 (-4:表示4天以内变动过的;+4:表示4天以前变动过的;4:表示在第四天当天变动过的)
find 目录 -size -2M (-1M:表示[0-2M]);+1M:表示(2M,无穷);2M:表示(1M,2M])
6、常用压缩工具及参数
(1)compress(仅对文件压缩)
-d:解压缩,相当于uncompress
-c:结果输出至标准输出,不删除源文件
-v:显示详情
(2)gzip(仅对文件压缩)
-d:解压缩,相当于gunzip
-c:结果输出至标准输出,保留源文件改变
bzip2(仅对文件压缩)
-k:keep,保留源文件
-d:解压缩
(3)xz(仅对文件压缩)
-k:keep,保留源文件
-d:解压缩
(4)zip(压缩及打包,可对文件及目录)
例如: zip -r 被打包压缩文件路径 打包压缩生成的目录
unzip -p message > message(解压重定向输出)
cat messages | zip messages - (其中-代表前一条命令的参数)
(5)tar(打包,可通过参数增加压缩功能)
tar -cpvf 打包生成的文件名 .tar 被打包文件 (归档打包)
tar -rf 以有打包文件.tar 被追加文件 (追加文件只归档)
tar -tf 打包文件.tar (查看归档文件中的文件列表)
tar -xvf 打包文件 -C 解压文件路径 (解压)
tar -(z|j|J)(c|x)vf (结合压缩工具实现归档并压缩,z:gzip;j:bzip2;J:xz)
(6)cpio(打包,需配合重定向输入输出使用)
find ./etc -print | cpio -ov > bak.cpio (将etc目录备份)
find /data | cpio -oA -F bak.cpio (将/data内容住家到bak.cpio,-F指定文件输出)
cpio -tv < etc.cpio (内容预览,配合重定向输入)
cpio -idv < etc.cpio (解包文件,配合重定向输入)