Shell数组
创建空数组
arr1=()
向数组中添加值的方法
1.创建非空数组:arr2=(赋值)
2.arr[0]=赋值
获取数组中的元素
echo "数组的元素为:${arr[0]}"
使用@ 或 * 可以获取数组中的所有元素
echo "数组的元素为:${arr[*]}"
echo "数组的元素为:${arr[@]}"
获取数组的长度
echo "数组的长度为:${#arr[*]}"
echo "数组的长度为:${#arr[@]}"
遍历数组
arr=(赋值)
for i in ${arr[*]}
do
echo $i
done
Shell运算符
=、-、*、/、%
使用echo、expr使用运算符
echo $[a+b]或echo $((a+b))(不需要有空格)
expr $a + $b(需要有空格)
以上两种方法只支持整数运算
条件判断
整数之间比较地运算符
-le 小于等于
-ne 不等
-lt 小于
-gt 大于
-eq 等于
-ge 大于等于
文件权限的判断
-r 文件名 可读
-w 文件名 可写
-x 文件名 可执行
按照文件类型判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
流程控制
if判断
基本语法:
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
case语句
基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于java中的break。
(3)最后的“*)”表示默认模式,相当于java中的default。
for循环
基本语法1:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
基本语法2:
for 变量 in 值1 值2 值3…
do
程序
done
while循环
基本语法:
while[条件判断式]
do
程序
done
read读取控制台输入
是一个小工具
基本语法:read(选项)(参数)
选项:
-p 指定读取值时的提示符
-t 指定读取值时等待的时间
参数:
变量 指定读取的变量名
函数
系统函数
语法:
basename
dirname(获取绝对路径)
自定义函数
语法:
[function] 函数名[()]
{
Action;
[return int]
}
分为两种:带参与不带参
Shell工具
cut
用法:
cut[选项参数] filename
选项参数 功能
-f 列号,提取第几列
-d 分割符,按照指定分隔符分割列
-c 制定具体的字符
sed
用法:
sed [选项参数] ‘command’filename
选项参数 功能
-e 直接在指令列模式上进行sed的运动编辑
-i 直接编辑文件
命令功能描述:
命令 功能描述
a 新增,a的后面可以接字串,在下一行出现
d 删除
s 查找并替换
awk
用法:
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数 功能
-F 指定输入文件拆分割符
-v 赋值一个用户定义变量
awk的内置变量
变量 说明
DILENAME 文件名
NR 已读的记录数
NF 浏览记录的域的个数
sort
基本语法:
选项 说明
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分割字符
-k 指定需要排序的列