来描述上一条语句执行的返回状态,如果是0则表示上一条指令执行的没有问题。
sh-4.2$ $? sh: 0: command not found sh-4.2$ echo $? 127 sh-4.2$ echo $? 0上图有三个指令,第一个指令显示命令未找到,返回异常。
在第二个指令中,使用echo $?打印上一个命令的状态(异常),所以是非0的。
在第三条,显示的是第二条指令的状态,是正常执行没有问题的,返回0。
基本语法
a) “ ( ( 运 算 式 ) ) ” 或 者 “ ((运算式))”或者“ ((运算式))”或者“[运算式]“
b) expr +,-,*,/,% expr运算符之间要有空格
例子
sh-4.2$ expr `expr 2 + 3` \/ 2 2 sh-4.2$ expr `expr 2 + 3` \* 4 20采用第一种语法就比较方便了。
sh-4.2$ S=$[(2+3)*4] sh-4.2$ echo $S 20[ condition ] 前后有空格
(1)比较
= 字符串比较
-lt 小于(less than)
-le 小于等于(less equal)
-eq 等于(equal)
-gt 大于(greater than)
-ge大于等于(greater equal)
-ne 不等于(not equal)
(2)按照文件权限进行判断
-r 有读权限
-w 有写权限
-x 有执行的权限
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)
输出0表示正常执行,上一个命令返回true
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
if后面要有空格
;; 表示命令序列结束,相当于java中的break
例子1+…+100
#!/bin/bash s=0 for((i=0;i<=100;i++)) do s=$[$s+$i] done echo $s sh-4.2$ bash for1.sh 5050read (选项) (参数)
选项:
-p 指定读取值时的提示符
-t 等待时间(秒)
参数:
变量:指定读取值的变量名
最后一个变量时后缀,加上会去掉指定后缀
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
参数说明
-f 提取第几列
-d 分隔符,按照指定分隔符分割列
sh-4.2$ cut -d " " -f 1 cut.txt dong guan wo lai le sh-4.2$ cat cut.txt dong sehn guan shen wo wo lai lai le le sh-4.2$ cat cut.txt | grep "guan" guan shen sh-4.2$ cat cut.txt | grep "guan" | cut -d " " -f 1 guan流编辑器,一次处理一行内容.
文件本身的内容并没有改变
sed [选项参数] ‘command’ filename
参数:-e 直接在指令列模式上进行sed的动作编辑
命令:
a 新增
d 删除
s 查找并替换
文本分析工具,将文件逐行读入,以空格作为默认分隔符将每行切片的部分再进行分析处理。
awk 选项参数 ’pattern1 {action1} pattern2{action2}…’ filename
选项参数:
-F 指定当输入文件分隔符
-v 复制一个用户定义变量
awk -F: '/^root/{print $1","$7}' passwd root,/bin/bashsort 选项 参数
选项:
-n 按照数值大小排序
-r 相反排序
-t 设置排序所用分隔符
-k 要排序的列
参数:待排序的文件列表
sh-4.2$ cat sort.sh bb:40:5.4 db:20:4.3 cls:10:3.5 zx:20:2.3 ss:30:1.6 sh-4.2$ sort -t : -nrk 3 sort.sh bb:40:5.4 db:20:4.3 cls:10:3.5 zx:20:2.3 ss:30:1.6