在写之前分享之前碰到的一个小问题
在shell中有两种多行注解
1 <<!
!
2 << EOF
EOF
这点需要注意
数组
Shell数组表达
用括号来表示,元素用“空格”符号分割开,
语法:arr=(value1,value2,value3)(这种方式带值)
获取@ 可以获取数组的所有元素
获取长度就是使用@和的时候就是在前面{}内加#
运算符
两种方式
$((运算式)) $[运算式]
或
Expr使用时要注意有空格
使用*的时候例如
$ expr ‘expr 2 + 3’ * 4
判断条件
Condition(注意condition前后都要有空格)
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
在[]中多条件判断
&&表示前一条命令执行成功时才会执行吓一跳,
|| 表示前一条执行失败了才会执行的下一条命令
流程控制
if条件语句的学习
在 Linux Shell 编程中,if、for、while、case 等条件流程控制
语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。
下面将逐个来讲解具体的用法:
If 条件判断语句
if (表达式) #if ( Variable in Array )
语句 1
else
语句 2
fi
案例一,测试数字大小
#!/bin/sh
NUM=100
if (( $NUM > 4 )) ;then
echo “this num is $NUM greater 4 !”
fi
案例二,测试目录是否存在,不存在则新建(注意,中括号之间必须
要空格)
#!/bin/sh
#judge dir exist
if [ ! -d /data/20140515 ];then
mkdir -p /data/20140515
else
echo “This DIR is exist,Please exit ……”
fi
逻辑运算符解析:
-f 判断文件是否存在 eg: if [ -f filename ]
-d 判断目录是否存在 eg: if [ -d dir ]
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符串
案例三,多个条件测试判断
#!/bin/sh
scores=80
if [[ $scores -gt 85 ]]; then
echo “very good!”;
elif [[ $scores -gt 75 ]]; then
echo “good!”;
elif [[ $scores -gt 60 ]]; then
echo “pass!”;
else
echo “no pass!”
fi
循环语句 for
For 变量 in 字符串
do
语句 1
done
案例一,打印 seq 数字循环
#!/bin/sh
for i in seq 15
do
echo “NUM is $i”
done
案例二,求和 1-100 的值
#!/bin/bash
#auto sum 1 100
j=0
for ((i=1;i<=100;i++))
do
j=expr $i + $j
done
echo $j
循环条件while
while 条件语句
do
语句 1
done
案例一,while 条件判断数字
#!/bin/sh
i=1;
while [[ $i -lt 10 ]];do
echo $i;
((i++));
done;
案例二,扩展讲解 linux read 命令
read -p ‘Please Input number:’
案例三,while 逐行读取某个文件
#!/bin/sh
while read line
do
echo $line;
done < /etc/hosts
Case 选择语句
case $arg in
pattern1)
语句 1
;;
pattern2)
语句 2
;;
*)
语句 3
;;
esac
案例一,创建选择参数脚本
#!/bin/sh
case $1 in
monitor_log)
monitor_log
;;
archive_log)
archive_log
;;
- )
echo “Usage:{$0 monitor_log | archive_log |help }”
;;
esac
Shell 编程
Sed 命令:
sed ‘s/192/10/g’ test.txt 把文件里面的 192 字符替换为 10
在文件开头或者结尾添加字符
Sed是一种流编辑器,它一次处理一行内容。文件内容并没有改变。
相关参数:
-e 直接在指令列模式上进行sed的动作编辑
-i 直接编辑文件
命令功能描述
a 直接在指令列模式上进行sed的动作编辑
d 删除
S 查找并替换
cut 命令:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.用法
Cut[选项参数] filename
说明:默认分隔符是制表符
2.参数说明
-f 列号,提取第几列
-d 分隔符,按照指定分割符分割列
-c 指定具体的字符
Awk命令
Awk一个强大的文本分析工具,将文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行分析处理
awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量
Sort命令
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列