shell编程的基本过程
1.建立shell文件(后缀不一定要为.sh,只是为了方便识别文件类型)
2.赋予执行权限,用chmod指令(如果在共享文件夹下不需要再用chmod赋予执行权限)
3.执行文件(直接在命令行上调用shell程序,不需要像我们的c一样需要编译才能调用)
shell变量
1.用户自定义变量
不支持数据类型,任何赋给变量的值都被shell解释为一串字符,命名规则同C++
注意在给变量赋值时,等号两边都没有空格,要调用变量的值,要在前面加上符号$
#!/bin/bash
WORD="hello"
echo $WORD
有时候变量名容易和其他文字混肴,可以加上花括号
num=2
echo "this is the ${num}nd"
2.位置变量即命令行参数
$0:程序名
$1,$2........$9:分别是第一个到第九个命令行参数,如果是10之后的要怎么表示呢?
很简单我们用括号括起来就行了${10}
3.预定义变量
注:$?往往用来接收上一个指令的退出状态,正常退出为0,否则为非0,在shell脚本编程中一般我们返回值为0则为真,为1则为假,注意和c语言中区分开来。
4.环境变量
shell功能语句
1.说明性语句
以#开头到该行结束,不被解释执行,一般用来解释程序功能,以免时间过长忘记,或方便别人理解使用。
2.功能性语句
任意的shell命令,用户程序等,常用的有
注意乘法*要使用转义符\
test:返回值为0为真,返回值为1为假
3.结构性语句
条件语句 if.......then.......fi
if......then.......else.......fi
我们来看几个例子:
1.输入分数判断等级
#!/bin/bash
echo -n "please input score:"
read s
if [ $s -lt 0 -o $s -gt 100 ]
then
echo "input err"
exit
fi
if [ $s -ge 90 -a $s -le 100 ]
then
echo "A"
elif [ $s -ge 60 -a $s -lt 90 ]
then
echo "B"
elif [ $s -ge 0 -a $s -lt 60]
then
echo "F"
fi
多路分支语句 case.......esac
我们来看一个例子,发现我们if后面语句是否和c语言类似,这里如果我们在shell脚本编写想用c语言的语法要用双括号括起来并且括号之间不能有空格
#!/bin/bash
echo -n "please input score: "
read s
if ((s > 100 || s < 0))
then
echo "input err"
exit
fi
case `expr $s / 10 ` in
9 | 10)
echo "A"
;;
6 | 7 | 8)
echo "B"
;;
*)
echo "F"
;;
esac
循环语句 for....do......done
我们来看一个例子:用shell脚本完成1-100的和计算
注意在shell中涉及到算术运算都要用expr指令
#!/bin/bash
n=0
for i in `seq 1 1 100 `
do
n=`expr $n + $i`
done
echo "1-100的和为$n"
例2:用shell脚本完成水仙花数的输出
特别要注意空格的使用!!!!
#!/bin/bash
for i in `seq 100 999 `
do
j=`expr $i % 10`
k=`expr $i / 10 % 10`
m=`expr $i / 100`
n=`expr $j \* $j \* $j + $k \* $k \* $k + $m \* $m \* $m`
if [ $n -eq $i ]
then
echo "$i"
fi
done
例3:用shell脚本打印一个三角形
#!/bin/bash
echo -n "请输入你要打印三角形的行数: "
read N
for i in `seq 1 $N`
do
k=`expr $N - $i`
for j in `seq 1 $k`
do
echo -n " "
done
h=`expr 2 \* $i - 1`
for j in `seq 1 $h`
do
echo -n "*"
done
echo ""
done
循环语句 while....do......done
循环控制语句 break和continue
shell函数