可以将命令的执行结果赋值给一个变量,然后通过变量的长度来判断是否有输出,如下命令判断是否有fake raid:
info=`ls/dev/mapper/isw_*`
if[-z"$info"];then
echo"findnofakeraid"
else
echo"yes,findresultis$info"
fi
这里info变量保存的是`ls /dev/mapper/isw_*`输出结果,通过if来判断输出是否为空,-z判断为空,-n判断是非空
㈡ shell变量定义【学习总结】
简单来说就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。
变量名的定义规则:
变量名严格区分大小写,不能有特殊字符,不能以数字开头,等号两边不能有任何空格,变量名尽量做到见名知意
1、基本方式
直接赋值给一个变量,变量名=变量值
2、命令执行结果赋值给变量
3、交互式定义变量(read)
目的: 让用户自己给变量赋值,比较灵活
常见选项释义:
-p 定义提示用户的信息
-n 定义字符数(限制变量值的长度)
-s 不显示(不显示用户输入的内容)
-t 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)
4、定义有类型的变量(declare)
目的: 给变量做一些限制,固定变量的类型,比如:整型、只读
用法:declare 选项 变量名=变量值
常用选项:
-i 将变量看成整数 declare -i A=123
-r 定义只读变量 declare -r B=hello
unset 变量名
相同点:引号中的内容可以作为一个整体
不同点:双引号可以引用变量,单引号不能引用变量
* :匹配0个或者任意多个字符
? :任意单个字符
[a-z] :括号内的任意单个字符
! :取反
{string,string,string} :匹配括号里面用逗号隔开的所有的字符串
{1..100} :匹配一个序列
案例:
1.脚本名称 ***.sh
2.脚本内容
1)定义解析器
#!/bin/bash
#!/bin/env bash 优势:会自动去找当前系统的解析器位置
2)注释说明
#
3)程序本身
定义变量+基本命令+基本语法+思想
1、标准脚本执行方法 :相对路径或者绝对路径
前提:标准执行方式脚本必须要有 可执行权限
2、非标准的执行方法 (不建议)
场景:查看脚本执行过程;或者脚本无法赋予可执行权限
解析器 +脚本文件
㈢ Unix 中shell命令。结果重定向(>)和结果附加重定向(>>)有什么区别
shell 使用三种标准 I/O 流:
stdout 是标准输出流,显示来自命令的输出。它的文件描述符是 1。
stderr 是标准错误流,显示来自命令的错误输出。它的文件描述符是 2。
stdin 是标准输入流,向命令提供输入。它的文件描述符是 0。
输入流向程序提供输入,常常是来自终端键盘。输出流打印文本字符,常常是在终端上。终端原来是 ASCII 打字机或显示终端,但是现在常常是图形桌面上的窗口。
对输出进行重定向
对输出进行重定向有两种方法:
n>
将来自文件描述符 n 的输出重定向到文件。必须对这个文件有写权限。如果文件不存在,就创建它。如果它存在,现有内容常常会丢失而没有警告。
n>>
也将来自文件描述符 n 的输出重定向到文件。同样,必须对这个文件有写权限。如果文件不存在,就创建它。如果它存在,输出就附加到现有文件后面。
n> 或 n>> 中的 n 是指文件描述符。如果忽略,就假设是标准输出。清单 66 演示使用重定向将来自 ls 的标准输出和标准错误分别放进两个文件,这些文件是在 lpi103 目录中创建的。还演示了如何将输出附加到现有的文件中。
清单 66. 输出重定向
㈣ 在linux系统中 用shell 或者python 运行 grep 命令 但要查找的内容是很多个 并想把结果放到一个变量中
如果多个内容是与关系,可以多个grep用管道相连,是或关系,可用正则式
如grep '\(ab|cd\)' a.txt 是查包含 ab或cd的行, grep 'ab' a.txt | grep 'cd' 是查包含ab和cd的行
要将结果赋到变量 a=`grep '\(ab|cd\)' a.txt ` 就行了
在python里就相当好办了,用不着grep啦,字符串的find函数就行啦