#!/bin/sh
这句一般在 shell 脚本的第一行。
告诉操作系统, 此脚本的解释器为 /bin/sh 这个可执行文件。类似地, 如果你的脚本用 bash, ksh, 解释, 第一行就应该是
#!/bin/bash
#!/bin/ksh
注意: shell 脚本对空格要求十分严格,关键字和符号之间必须加空格。
一、判断
1、字符串判断
str1 = str2 (或者‘==’) 当两个串有相同内容、长度时为真
str1 != str2 当串 str1 和 str2 不等时为真-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串 str1 为非空时为真
2、数字的判断
int1 -eq int2 两数相等为真int1 -ne int2 两数不等为真
int1 -gt int2 int1 大于 int2 为真
int1 -ge int2 int1 大于等于 int2 为真
int1 -lt int2 int1 小于 int2 为真
int1 -le int2 int1 小于等于 int2 为真
3、文件的判断
-r file 用户可读为真-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
4、复杂逻辑判断
-a 与-o 或
! 非
5、条件判断
5.1 if -then 语法格式: if [ 条件 ] ; then
elseif [ 条件2 ] ; then
else
fi #if 语句结束标识
示例1:输入分数输出成绩:
#! /bin/sh
echo "Please enter a score:"
read score
if [ -z "$score" ]; then
echo "You enter nothing.Please enter a score:"
read score
else
if [ "$score" -lt 0 -o "$score" -gt 100 ]; then
echo "The score should be between 0 and 100.Please enter again:"
read score
else
#如果成绩大于90
if [ "$score" -ge 90 ]; then
echo "The grade is A."
#如果成绩大于80且小于90
elif [ "$score" -ge 80 ]; then
echo "The grade is B."
#如果成绩大于70且小于80
elif [ "$score" -ge 70 ]; then
echo "The grade is C."
#如果成绩大于60且小于70
elif [ "$score" -ge 60 ]; then
echo "The grade is D."
#如果成绩小于60
else
echo "The grade is E."
fi
fi
fi
5.2 case-esac 语法格式: case $变量名称 in
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
*)
程序段
;;
esac
二、循环
1. for 循环
语法格式: for ... in ....
do
程序段
done #结束标识
示例2:输出 1-100 之间可以被 3 整除的数:
#!/bin/sh
for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
三、shift 用法
shift 命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux 中各种程序的启动脚本)
示例3:依次读取输入的参数并打印参数个数:
#!/bin/sh
while [ $# != 0 ];do
echo "第一个参数为:$1,参数个数为:$#"
shift
done
上面的文件名是 demoTest.sh ,输入如下命令运行:demoTest.sh a b c d e f
结果显示如下:
第一个参数为:a,参数个数为:6
第一个参数为:b,参数个数为:5
第一个参数为:c,参数个数为:4
第一个参数为:d,参数个数为:3
第一个参数为:e,参数个数为:2
第一个参数为:f,参数个数为:1
从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。
同理,shift n 后,前 n 位参数都会被销毁。
示例4:
#!/bin/sh
echo "参数个数为:$#,其中:"
for i in $(seq 1 $#)
do
eval j=\$$i
echo "第$i个参数($"$i"):$j"
done
shift 3
echo "执行shift 3操作后:"
echo "参数个数为:$#,其中:"
for i in $(seq 1 $#)
do
#通过eval把i变量的值($i)作为变量j的名字
eval j=\$$i
echo "第$i个参数($"$i"):$j"
done
创建文件: touch
创建文件夹: mkdir
示例5:
#!/bin/bash
#往脚本里传 待删除文件个数 待删除图片个数 待删除文件路径 待删除图片路径
a=1
#file Num
fileN=$1+1
#imageUrl Num
imagN=$2+1
for i in "$@"
do
if [ $a -ge 3 ] && [ $a -le $(($fileN+2)) ]
then
#rm -f or rm
# echo $i
rm -f $i
fi
#delate imageUrlFile
if [ $a -gt $(($fileN+2)) ]
then
# echo $i
rm -f $i
fi
let "a++"
done
推荐:(优质文章)