Common@IT·互联网程序员

关于shell编程2

2017-05-07  本文已影响63人  杭sing

今天起来的时候想到一句话,程序员比不得其他行业,我们只有每天坚持不断地学习,复习旧的知识,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宣传栏
上一篇下一篇

猜你喜欢

热点阅读