您的位置:首页 > 运维架构 > Shell

shell script基础一

2015-12-15 17:55 369 查看
第一行写入:

#!/bin/bash

输出:

echo "hello,world"

echo 'hello,world'

变量:

a=2

b=3

中间不能有空格

echo a+b

结果输出就是a+b,因为在运行时会把a+b看做是字符串。

所以要计算a+b。应该是 echo $((a+b)) 输出结果就是5了。(第一种)

第二种计算方式:let s=$a+$b, echo s,结果输出就是5

第三种计算方式:

declare -i s

s=$a+$b

echo s 结果输出就是5。第二种是让字符串进行计算给予s,第三种是声明(declare)一个int(-i)类型的s,进行计算存入s中。$是从变量中取出数值的字符。

任意数进行加法运算:

echo 'please input first number:'

read a

echo 'please inpu second number:'

read b

let s=$a+$b

echo "result is$s"

echo "result is"$s

echo 'result is$s'

echo 'result is'$s



建立并进行编译blog_CSDN.sh,给予拥有者执行权限,查看权限,输入内容,输出结果对应上面的代码。

知识点1:从键盘输入数值,要用到read,用a接收,就是read a 同样也可以同时输入多个数,那就是read a b这样的话在键盘输入的时候要用空格分开a b。比如3空格4。

2:计算输出的结果不同:双引号“”有保留变量的作用,所以写内外都一样,单引号‘’没有保留变量的作用,所以必须写外面,写里面就被认为是字符串。

函数:

sum()

{

x=$1

y=$2

let s=$x+$y

return $s

}

echo "please input two number:"

read a b

sum $a $b

k=$?

echo "result is $k"



知识点1:函数要写在主调函数上面

2:调用函数传参数sum $a $b,中间必须带空格,如果没有参数调函数直接写sum

3:接收参数x=$1 y=$2 表示x形参接收a,y同样

4:返回值:k=$? 用k接收返回值,?表示任意类型。

分支结构(多条件)

数值类型:

第一种写法:

if [ "$a" -eq "$b" ];then

elif [ "$a" -gt "$b" ];then

elif [ "$a" -lt "$b" ];then

else

fi

第二种写法:

if (( "$a" == "$b" ));then

elif (( "$a" > "$b" ));then

elif (( "$a" < "$b" ));then

else

fi

字符类型:

if [ "$m" == "+" ];then

elif [ "$m" == "-" ];then

elif [ "$m" == "*" ];then

elif [ "$m" == "/" ];then

else

fi

这几种类型相互匹配,写法就是这样,千万千万千万千千万记住空格,眼睛睁大了看清楚空格的位置,必须有!!!!还有就是结尾必须以fi结尾下面是解释。
shell运算符比较:

整数比较

-eq 等于,如:if
[ "$a" -eq "$b" ]

-ne 不等于,如:if [ "$a" -ne "$b"
]-gt 大于,如:if [ "$a" -gt "$b"
]

-ge 大于等于,如:if [ "$a" -ge "$b"
]-lt 小于,如:if [ "$a" -lt "$b"
]

-le 小于等于,如:if [ "$a" -le "$b"
]

<
小于(需要双括号),如:(("$a"
< "$b"))

< = 小于等于(需要双括号),如:(("$a"
<= "$b"))> 大于(需要双括号),如:(("$a"
> "$b"))

> = 大于等于(需要双括号),如:(("$a"
>= "$b"))

字符串比较
=
等于,如:if [ "$a" = "$b" ]

== 等于,如:if [ "$a" == "$b" ],与=
等价

逻辑表达符号:-o、-a分别表示逻辑或、逻辑与

while 循环:

while [条件表达式]

do

语句

done

case in语句:

case $a in

条件表达式1)

语句1

;;

条件表达式2)

语句2

;;

条件表达式3)

语句3

;;

*)

语句4

;;

esac

*表示其他,每一句完后用;;表示结束。esac 表示结尾!

一些其它的知识:

1:判断是不是目录用-d

if [ -d "$mydir" ]

2:判断是不是文件 -f

if [ -f "$myfile" ]

3:数据流重定向:

echo “hello” >> /tmp/log

4:判断当前用户 $UID、$USER

都必须大写echo $UID 结果是0说明是root,同样user是root那也是root用户

5:查找当前登录用户是谁或者组名字,用搜索或者搜索加管道值

搜索加管道值:grep tester /etc/passwd | cut -d : -f 1

从配置文件etc下的用户信息passwd中搜索tester用户,通过管道值,用:分割字符串,取第一个字符串。如果输出结果是tester说明用户存在,如果什么都没有,说明没有次用户

6:插入内容语句

sed -i '10acharudeneirong' ./.bash_profile

10a表示插入十行后

charudeneirong表示插入的内容

-i表示进入编辑模式

./.bash_profile表示插入当前路径下的.bash_profile中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: