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

shell最基础的笔记

2013-01-29 20:07 429 查看
注意:“=”左右两边都不能有空格,BASH中的语句结尾不需要分号

程序1

#!/bin/sh

#echo something

echo "hello world"

echo "hello !!"

cd /root/Desktop

mkdir ./abc

程序2,变量不需要类型,也不需要定义,使用的时候加上$,赋值的时候不用

#!/bin/sh

#set variable a

a="hello world"

#print a

echo "A is:"

echo $a

如果是在字符串中如何输出变量

num=2

echo "this is the ${num}nd"

会变成this is the 2nd

重要提示:

$#传入脚本的命令行的参数个数

$*所有命令行的参数值(空格隔开)

$#命令本身(shell文件名)

$1第一个命令行参数

$n第n个命令行参数

程序3

s3中

#!/bin/sh

echo "number of vars:" $#

echo "values of vars" $*

echo "value of var1"	$1

echo "value of var2"	$2

echo "value of var3"	$3

echo "value of var4"	$4

终端中运行并输入

./s3 1 2 3 4

得到的输出是

number of vars:4

values of vars:1 2 3 4

value of var1:	1

value of var2:	2

value of var3:	3

value of var4:	4

局部变量

在变量首次被赋值的时候加上local关键字可以声明一个局部变量,例:s4

#!/bin/bash

hello="var1"

echo $hello

function func1(){

local hello="var2"

echo $hello

}

func1

echo $hello

运行

./s4

得到

var1

var2

var3

!!!!如果去掉local,上面的程序将输出vr1,vr2,vr2

IF语句

格式:

if [expression]

then

#code block

fi

或者

if [expression]

then

#code block

else

#code block

fi

或者多重if

if [expression]

then

#code block

else if [expression]

then

#code block

else

#code block

fi

fi

fi#每个if对应一个fi

比较:

比较操作		整数操作		字符串操作

相同			-eq			=

不同			-ne			!=

大于			-gt			>

小于			-lt			<

大于或等于		-ge

小于或等于		-le

为空			-z

不为空			-n

eg:

注意“[“”]“符号的左右都留有空格,“=”左右都有空格

比较整数a和b是否相等 			if [ $a = $b ]  		(也可以用-eq)

判断整数a是否大于整数b		if [ $a -gt $b ]

比较字符串a和b是否相等		if [ $a = $b ]

判断字符串a是否为空			if [ -z $a ]

判断整数变量a是否大于b		if [ $a -gt $b ]

判断:

-e			文件已经存在

-f			文件是普通文件

-s			文件大小不为零

-d			文件是个目录

-r			文件或目录对当前用户可以读取

-w			文件或目录对当前用户可以写入

-x			文件或目录对当前用户可移植性

程序5

#!/bin/sh

folder=/home

[ -r "$folder" ] 	&& echo "Can read $folder"(当前面的判断成立,执行&&后的)

[ -f "$folder" ]    ||	echo "this is not file"(判断为假执行||后的语句)

由于folder是个目录,可读,故不输出第一条语句

由于folder是个目录,不算文件,故输出第二条语句

For循环

格式:

for var in [list]

do

#code block

done

其中$var是个循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体,相当于C语言的大括号。另外如果do和for被写在同一行,必须在do前面加上“;”。

如:for $var in [list] ; do

程序s6

#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat

do

echo $day

done

程序s8:如果列表被包含在一对双引号内,则被认为是一个元素,在这里只运行一次。

#!/bin/bash

for day in "Sun Mon Tue Wed Thu Fri Sat"

do

echo $day

done

注意:for所在的那一行变量名前面不加 $,因为这是赋值的过程 ,而在循环体里面,echo所在行的变量是必须加上$符号的。

while循环

while [ condition ]

do

#code block

done

until循环

until [ condition ]

do

#code block

done

while 和 until 的区别在于 while 是为真的时候执行,而until 是为假的时候执行。

case语句:bash 中的 case 结构和C语言的 switch 语句功能类似,可以进行多选项分支控制。

case "$var" in

condition1 )

;;

condition2 )

;;

*)

default statments;;

esac

程序s7

#!/bin/bash

echo "Hit a key,then hit return."

read Keypress

case "$Keypress" in

[A - Z] ) echo "Uppercase Letter";;

[a - z] ) echo "Lowercase Letter";;

[0 - 9] ) echo "Digit";;

*) echo"Punctuation,whitespace,or other";;

esac

特殊:

if [ -z $a ] || [ -z $b ]或者

exit 1错误退出,在if中可以省略fi

read Keypress读入一行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: