Linux 提供的 cat /etc/shells
Sh 是bash的快捷方式
Centos 默认解析器是bash
常用的系统变量:
HOME PWD SHELL USER
局部变量 和全局变量
#Export 变量名 //可以把变量转为全局变量
$n 特殊变量
$0 代表脚本名称 $1-9 代表第一到第九个参数,十以上的参数要用${}
$# 返回参数个数
$* 所有参数,把所有参数看成一个整体,$@也是代表所有参数但是把每个参数区分对待
运算符:
$((运算式)) 或 $[运算式]
Expr + - \* / % (expr 运算符间要有空格)
例如: expr `expr 2 + 3 ` \* 4 =20
条件判断: 前后要有空格
两个整数间比较:[ ]
-lt 小于 -eq 等于 -ge 大于等于 -le 小于等于 -gt 大于 -ne 不等于
按照文件权限判断:
-r 有读权限 -w 有写权限 -x 有执行权限
按照文件类型判断:
-f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并且是一个目录
多条件判断:
&& 表示当一条命令执行成功后才执行后一条命令,|| 表示上一条执行失败后才执行下条命令
流程控制
If判断语句
If [条件判断式];then
Xxxx
Elif [条件判断式];then
xxxxxx
Fi
case语句
Case $变量名 in
“值1”)
Xxxxxx
;;
“值2”)
Xxxxxx
;;
*)
Xxxxxx
;;
Esac
For 循环语法1
For (( 初始值;循环控制条件;变量变化))
Do
Xxxxxx
Done
语法2:
For 变量 in 值1 值2 值3 。。。。。
Do
Xxxxxx
Done
例如:
For i in “$*”
Do
Echo 结果为 $i
Done
当 for j in “$@”
Do
Echo $I
Done
注意:当xxx.sh 1 2 3 4 第一个输出 结果为 1 2 3 4
第二个输出:
结果为1
结果为2
结果为3
结果为4
While 循环:
While [条件判断式]
Do
Xxxxx
Done
Read 读取控制台输入
#read
-p 指定读取值时的提示符
-t 指定读取值时等待的时间
函数:
系统函数:
Basename [string/pathname] ][suffix]
Basename 命令会删掉所有的前缀包括最后一个/字符,然后字符串显示出来
选项:suffix为后缀,如果suffix被指定了basename会将pathname中的suffix去掉
basename /root/ceshi/ceshi1/test.txt 得到 test.txt
Basename /root/ceshi/ceshi1/test.txt .txt 得到 test
Direname 文件绝对路径(从给定的绝对路径的文件名去除文件名,然后返回剩下的路径)
dirname /root/ceshi/ceshi1/test.txt 得到 /root/ceshi/ceshi1
自定义函数
[function] funname()
{}
Funname
函数返回值,只能通过$? 系统变量获得,可以显示增加,return返回,如果不加将以最后一条命令运行结果作为返回值 return 后跟数值n(0-255)
例如:
Function sum(){
S=0
S=$[$1+$2]
Echo $s
}
Reap -p “para1:” p1
Reap -p “para2:” p2
Sum $p1 $p2
shell工具:
Cut
文件中负责剪切数据的,从每一行截切字节、字符和字段并将结果输出
#cut [选项] filename
-f 列号 提取第几列
-d 分隔符 按照分隔符分割列
获取ip值:
Ifconfig eth0 |grep “inet addr”|cut -d : -f 2|cut -d “ ” -f 1
Sed
是一种流编辑器,一次处理一行内容,处理时把当前处理行存储在临时空间中,接着用sed命令处理缓冲区中的内容,处理完后把内容发送屏幕,接着处理下一行,这样不断重复直到文件末尾。文件内容没有改变
Sed [选项参数] ‘command’ filename
-e 直接进行编辑
-a 新增 下一行出现 -d 删除 s 查找并替换
Awk
一个强大的文本分析工具把文件逐行读入,以空格为默认分隔符将每行切片,切开部分在进行分析处理
Awk [选项参数] ‘pattern{action1} pattern{action2}’ filename
Pattern 表示awk在数据中查找内容就是匹配模式 action 就是找到匹配内容后执行的命令
-F 指定输入文件分隔符
-v 赋值一个用户定义变量
Awk 内置变量
FILENAME 文件名
NR 已读的记录数
NF 浏览后 切割的列的个数
例如:将passwd中第三列的值都加1
Awk -F : -v i=1 ‘{print $3+i}’ passwd
Awk -F : ‘{print FILENAME ,NR,NF}’ passwd
切割ip值
Ifconfig eth0|grep “inet addr” |awk -F : ‘{print $2}’ |awk -F “ ” ‘{print $1}’
查询空行所在的行号
Awk ‘/^$/{print NR}’ sed.txt
Sort
将文件进行排序并将结果标准输出
-n 按照数值大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分割字符
-k 指定需要排序的列
例如:sort -t : -nrk 2 passwd