0%

SHELL之循环语句

  1. if语句
  2. 交互选择
  3. 循环判断
  4. 数值运算符
  5. …………

if语句格式:

1
2
3
4
5
6
if [ 条件 ]
then
command
else
command
fi

交互选择(N可以为*)

1
2
3
4
5
6
7
8
9
10
echo -e "提示语言,后边有光标提供输入"c
read VAR
case $VAR in
Y)
command
;;
N)
command
;;
esac

对条件进行循环检查,成立则处理,否则继续检查

1
2
3
4
5
6
7
8
9
10
11
12
13
a=1
while [ "$a" = "1" ]
do
fileno=`ls -l /list/filename* |wc -l`
if [ "$fileno" = "10" ]
then
a=10
command
else
a=1
sleep 300
fi
done
1
2
3
4
5
6
grep -v www filename 过滤不包含
grep www filename 过滤包含
uniq -u 过滤没有相同行
uniq -d 过滤具有相同行
sort 排序
paste -d”;” filename1 filename2 把文件并列合并并且以;间隔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if [ "a" = "10" ] #a=10
[ "a" -ne "10" ] 同上一行
[ -s filename ] 文件大小大于0
-s 文件大小大于0返回真
-d 是一个目录是返回真
-e 文件或目录存在返回真
-g 存在是SGID返回真
-h 文件是连接文件返回真
-k 文件是粘滞位返回真
-r 文件或目录存在并可读时返回真
-w 文件或目录存在并可写时返回真
-u 文件是SUID返回真
-x 文件是可执行的返回真

-eq 等于
-ne 不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
1
2
3
4
5
2*3+4|bc 计算前面的数据
ping -w 2 www.163.com 测试2两次
对上一次指令结果判断
$?=0 为真
$?=1 为假

给SHELL后边加参数

1
2
3
4
5
6
7
8
XXXX=`echo | wc -c`
cat $HOME/list/file.txt 1>/dev/null 2>/dev/null
OK=$?
if [ "" = "" ] || [ "$XXXX" -lt "4" ] || [ "$OK" -ne "0" ]
then
echo "参数没有输入,输入位数不等于3,file.txt不存在,请重新输入"
exit
fi

一个循环检查

1
2
3
4
5
6
7
8
9
line=1
for i in `cat bb`
do
qq=`echo "scale=2;$i*100" | bc | awk -F. "{print }"`
if [ "$qq" -ge "75" ]
then
sed -n "$line"p temp.1 >> bad.1
fi
line=`expr $line + 1` ###每次加1