关于shell编程2
今天起来的时候想到一句话,程序员比不得其他行业,我们只有每天坚持不断地学习,复习旧的知识,Get新的工具 新的语言,我们才能不会被这个行业淘汰。今天还是继续讲讲shell编程的基本语法,之前说过shell是解释型语言,输出一个hello world 只要echo一下就可以,相比较于Java这些的还是轻松很多的。今天我们就一起结束这个shell编程。
-------------------------------------------------------------------------------------
第二部分:
-------------------------------------------------------------------------------------
算数运算
1、用expr
格式: expr m+n 或$((m+n))
e.g. 计算 (2+3)*4
s=`expr 2 + 3`
expr $s \* 4
这里用的是简单的分布运算,运算符之间一定要有空格,否则输出的就是一个字符串了。
expr `expr 2 + 3` \* 4
echo `expr \`expr 2 + 3\` \* 4`
这里是一不完成的计算,用法比较简单 但是容易出错,所以记不住的话就只能自己多测试几遍了
2、用(())
a=$((1+2))
echo $a
count=1
((count++))
echo $count
上面这两种都是用的(())
3、用$[]
a=$[1+2]
echo $a
-------------------------------------------------------------------------------------
流程控制
写程序就是靠流程控制,所以下面重点来了,我发现我写代码的时候命名不是很规范,大家就是不要学我了。嘿嘿,我们继续看以下的知识点
if while case for (都是这么几个套路,命令之间前往别忘记空格,不然出现的错误分分钟想让你自杀)
-------------------------------------------------------------------------------------
if语法
e.g.
vi hello.sh
#!/bin/bash
read -p "please input your name:" NAME
if[ $NAME = root ]
then
echo "hello ${NAME}, welcome!"
elif [ $NAME = other ]
then
echo "hello ${NAME}, welcome!"
else
echo "go out!"
fi
chmod +x hello.sh
这里留下一个小小的问题
#!/bin/bash
if [ a=b ]
then
echo ok
else
echo notok
fi
输出的会是什么?
所以说上面提还要示一定要注意的地方一定要注意,不然郁闷半天埋怨自己怎么选择了编程这个行业,甚至还要怀疑人生了。
if 里面还有一个类似于Java中三目运算符的式子
[ condition ] && echo ok || echo notok
condition判断组合 [] [[]] 后者里面是可以使用逻辑运算符的 当然也可以将逻辑运算符换成 -a -o 就可以在[]里面执行了。
if 里面的最后一点还剩常用判断运算符
条件判断
[ 'aa' = 'bb' ]
[ -n "aa" ] 不为0返回true
[ -z "" ] 为0 返回true
整数判断
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
文件判断
-d 是否为目录
-f 是否为文件
-e是否存在
-------------------------------------------------------------------------------------
while语法
1、while expression
do
command
...
done
2、i=1
while((i<3))
do
echo $i
let i++
done
case语法
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "Usage:{start|stop}"
esac
-----这是我用自己的方法测试的结果,大家这些可以自己写到脚本里运行一下
chx@ubuntu:~/briup$ vi case.sh
chx@ubuntu:~/briup$ chmod +x case.sh
chx@ubuntu:~/briup$ ./case.sh
input:start
starting
-------------------------------------------------------------------------------------
for语法
1、for N in 1 2 3
do
echo $N
done
或
for N in 1 2 3; do echo $N;done
或
for N in {1..3};do echo $N;done
2、
for ((i=0;i<=5;i++))
do
echo $i
done
-------------------------------------------------------------------------------------
函数的使用
#!/bin/bash
#func1.sh
hello()
{
echo "hello today is `date +%Y-%m-%d`"
#return 2
}
hello
函数调用的方式:
function hello()
function hello
hello
有一个应该不用说了函数调用要在函数的声明之后,在函数结束后面还可以添加return 返回一个状态码 可以通过 echo $? 获取到
函数参数
#!/bin/bash
#fun1.sh
function(){
echo "第一个参数$1"
echo "第一个参数$2"
echo "第一个参数$3"
echo "第一个参数$4"
echo "第一个参数$5"
echo "第一个参数$6"
echo "第一个参数$7"
echo "第一个参数$8"
echo "第一个参数$9"
echo "第一个参数$10"
echo "第一个参数${10}"
}
function 1 2 3 4 5 6 7 8 9 10000 11
这里涉及到一个小技巧 当参数大于等于的10的时候 就要用{}才能获取到参数
函数的返回值
#!/bin/bash
fun1(){
echo "这个函数会对两个输入的两个数字进行运算..."
echo "请输入第一个数字:"
read aNum
echo "请输入第二个数字"
read otherNum
echo "这两个数字分别是 $aNum 和 $otherNum "
return $(($aNum+$otherNum))
}
fun1
echo "输入的两个数字之和是: $? "
大家测试的时候试着输入一个更大的数值 你会有惊喜发现 因为返回的是8位 哈哈~
跨脚本调用函数
这里我先说明一下 fun1.sh 我的路径是在 /home/chx/briup
#!/bin/bash
#fun2.sh
. /home/fun1.sh # 或者是 source /home/fun1.sh
. /home/chx/briup/fun1.sh
fun1
到这里shell就结束了 有错误 或者需要交流的请关注我的微信公众号
hangsing宣传栏