文档库 最新最全的文档下载
当前位置:文档库 › linux+shell脚本语言基础知识

linux+shell脚本语言基础知识

linux+shell脚本语言基础知识
linux+shell脚本语言基础知识

linux shell脚本语言基础知识

一.shell简介

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。

shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。

Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell

(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。

二.shell使用

1.建立和运行shell程序

shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限)

像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。

首先使用VIM编辑器编辑一个hello.sh文件:

#!/bin/bash

#hello world example

echo "hello world"

这样,一个最简单的shell程序就编写完了。

第一行:#!说明hello.sh这个文件的类型的,这有点类似于Windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。Linux系统根据#!及该字符串后面的信息确定该文件的类型。在#!之后是一个路径名,这个路径名指定了一个解释脚本中命令的程序。

第二行:“#hello world example”就是shell程序的注释,(但后面紧接着“!”号的除外)

第三行:echo(回显)语句的功能是把echo后面的字符串输出到标准输出中。现在,建立和写好之后,那么该程序如何运行呢?

由于该脚本没有执行的权限,只需要修改其执行的权限即可,执行:chmod

a+x hello.sh。然后输入命令:./hello.sh即可看到效果。

2.shell变量

变量是一个存储值的实体,可以是一个名字,或者一个特殊的值。shell可以创建,分配和删除变量。

(1)变量设置规则:

a.变量与变量内容以等号(=)来连接

b.等号两边不能直接接空格符

c.变量名称只能是英文字母与数字或下划线,但是数字不能是开头符

d.引用变量名用“$变量名”

#!/bin/bash

#hello world example

a="hello world"

echo $a

以上例子一样可以输出hello world。

e.若有空格符可以使用双引号或单引号将变量内容结合起来,但必须注意,双引号的特殊字符可以保有变量的特性,但是单引号内的特殊字符则仅为一般字符。

#name="$LOGNAME is hh" //root is hh

#name='$LOGNAME is hh' //$LOGNAME is hh

f.通常大写字符为系统预设变量,自行设定的变量可以使用小写字符

(2)取消变量:用unset 变量名

#!/bin/bash

#hello world 例子

a="hello world"

unset a

echo $a

以上例子将不会打印出任何东西。

3.shell特殊变量

$0 :执行的脚本的文件名

$1 :脚本文件的第一个参数名

$# :传递到脚本的参数个数

$* :以一个单字符串显示所有向脚本传递的参数

$$ :脚本运行的当前进程ID号

$? :显示最后命令的退出状态,0表示没有错误,其它值表示有错误

例子a.sh

#!/bin/bash

echo "the file is $0"

echo "the parameter is $1 $2"

echo "number of parameter is $#"

echo "all parameter is $*"

echo $?

加权限后执行./a.sh hh mm gg

则打印

the file is ./a.sh

the parameter is hh mm

number of parameter is 3

all parameter is hh mm gg

4.常用shell内嵌命令

(1)echo:显示变量内容

(2)env:显示目前系统中主要的预设变量内容(3)set:显示目前系统中全部的变量内容(4)read:从键盘读入变量内容

(5)declare:声明变量内容

-a:定义为数组array

-f:定义为函数function

-i:定义为整数integer

-r:定义为“只读”

-x:定义为透过环境输出变量、

例子:

#!/bin/bash

a=1+1

declare -i b=1+1

echo $a

echo $b

执行后输出结果为1+1

2

5.条件测试

在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做下一步动作。

test命令就是用于测试字符串,文件状态和数字的.test命令两种格式:

test condition

或[ condition ]

使用方括号时,要注意在条件两边加上空格

三.shell脚本编程基础知识

1.shell基本运算符

(1)算术运算符

+:对两个变量做加法。

-:对两个变量做减法。

\*:对两个变量做乘法。

/:对两个变量做除法。

**:对两个变量做幂运算。

%:取模运算,第一个变量除以第二个变量求余数。

+=:加等于,在自身基础上加第二个变量。

-=:减等于,在第一个变量的基础上减去第二个变量。

*=:乘等于,在第一个变量的基础上乘以第二个变量。

/=:除等于,在第一个变量的基础上除以第二个变量。

%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量

在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。

echo 1+2

Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。

a、用expr改变运算顺序。可以用echo `expr 1 + 2`来输出1+2的结果,用expr 表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而

是“Tab”键上面的那个符号。

b、用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let

1 + 2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。

c、用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算(中括号中可以包含空格)。例如命令echo $[1+2],将输出结果3。

(2)关系运算符

-eq:数值相等-ne:数值不相等-ge:数1大于等于数2

-lt:数1小于数2 -gt:数1大于数2 -le:数1小于等于数2

输入test 1 -lt 2 && echo "yes"则打印yes

(3)布尔运算

-a:(and)两状况同时成立!test -r file -a -x file,则file同时具有r和x权限时,才为true。

-o:(or)两状况任何一个成立!test -r file -o -x file,则file具有r或x权限时,就为true。

!:相反状态,test !-r file,当file不具有r权限时,就为true。

(4)字符串运算符

=:两个字符串相等!=:两个字符串不相等

-z:空串-n:非空串

输入test "a" = "a" && echo "yes"则打印yes

(5)测试文件状态的条件表达式:

-e:是否存在-d:是目录-f:是文件-L:符号连接-s文件非空-r:可读-w:可写-x:可执行

2.shell条件语句

(1)if...fi语句结构

if [条件1];then

执行程序

fi

例子:

#!/bin/bash

declare -i a=10

declare -i b=20

if [ $a == $b ];then

echo "a is equal to b"

fi

if [ $a != $b ];then

echo "a is not equal to b"

fi

输出结果为:a is not equal to b

(2)if...else...fi语句结构

if [条件1];then

执行程序1

else

执行程序2

fi

例子:

#!/bin/bash

declare -i a

echo "input 1 or 2"

read a

if [[ $a -eq 1 ]];then

echo "1"

else

echo "2"

fi

打印为input 1 or 2

1

1

(3)if...elif...else...fi语句结构if [条件1];then

执行程序1

elif[条件2];then

执行程序2

else

执行程序3

fi

例子:

#!/bin/bash

declare -i a=10

declare -i b=20

if [ $a == $b ];then

echo "a is equal to b"

elif [ $a -gt $b ];then

echo "a is greater than b"

else

echo "a is less than b"

fi

输出结果为:a is less than b (4)case...esac语句结构

case $变量名称in

“第一个变量内容”)

程序1

;;

“第二个变量内容”)

程序2

;;

*)

其它程序

exit 1

esac

例子:

#!/bin/bash

echo "you like"

echo "1 is apple"

echo "2 is orange" echo "input your choice" read a

case $a in

1)

echo "you like apple" ;;

2)

echo "you like orange" ;;

*)

echo "you like nothing" exit 1

esac

执行后结果为:

you like

1 is apple

2 is orange

input your choice

you like apple

3.shell循环类型

(1)for循环

循环操作项目清单。重复一组命令列表中的每个项目。语法一:

for (( 初始值; 限制值; 执行步阶))

do

程序

done

初始值:变量在循环中的起始值

限制值:当变量值在这个限制范围内时,就继续进行循环执行步阶:每作一次循环时,变量的变化量

例子:

#!/bin/bash

declare -i s

s=0

for (( i=1; i<=100; i++ ))

do

s=s+i

done

echo "the sum is $s"

输出结果为:the sum is 5050

语法二:

for var in con1 con2 con3 ...//var是一个变量

do

程序

done

第一次循环时,$var的内容为con1

第二次循环时,$var的内容为con2

第三次循环时,$var的内容为con3

例子:

#!/bin/bash

declare -a A

A=(1 2 3 4 5 6 7 8 9 10)

declare -i c

for i in 1 3 5 7 9

do

c=c+A[$i];

done

echo "the count is $c"

输出结果为:the count is 30

(2)while循环

while循环,使您能够重复执行一组命令,直到某些条件发生。它通常用于当你需要反复操纵的变量值。

语法如下:

while [ 条件]

程序

done

当条件成立的时候进入while循环,直到条件不成立时才退出循环

例子:

#!/bin/bash

declare -i a=0

while [ $a -lt 10 ]

do

echo $a

a=a+1

done

这将产生以下结果:

1

2

3

4

5

6

7

8

9

每一次执行这个循环,变量a进行检查,看该值是否小于10。如果a的值小于10,则输出该值

(3)until循环

完美的情况下,你需要执行的一组命令某个条件为真时,while循环执行。有时候,你需要执行一组命令,直到某个条件为真。

语法如下:

until 命令

do

程序

done

这种方式与while循环恰恰相反,当命令成立的时候退出循环,否则继续循环例子:

#!/bin/bash

declare -i a=0

until [ $a -gt 10 ]

do

echo $a

a=a+1

done

这将产生以下结果:

1

2

3

4

5

6

7

8

9

(4)select循环

语法如下:

select var in word1 word2 ...

do

程序

done

例子:

#!/bin/bash

echo "what is this?"

select i in tea cofee water apple orange none do

case $i in

tea|cofee|water)

echo "drink"

;;

apple|orange)

echo "fruit"

;;

none)

break

;;

*) echo "ERROR: Invalid selection"

;;

esac

done

打印信息为:

what is this?

2) cofee

3) water

4) apple

5) orange

6) none

#? 1

drink

#? 6

四.shell数组

shell数组的使用

$ a=(123 34 3 5)

$ echo $a // 默认获取第一个元素

123

$ echo ${a[1]} // 通过下标访问

34

$ echo ${a[@]} // 访问整个数组,@或者* 获取整个数组123 34 3 5

$ echo ${#a[@]} // 获取数组的长度

4

$ echo ${#a[3]} // 获取字符串长度

1

$ echo ${a[@]:1:2} // 切片方式获取一部分数组内容

$ echo ${a[@]:2} // 从第二个元素开始

3 5

$ echo ${a[@]::2} // 到第二个元素

123 34

应用实例:

#!/bin/bash

declare -a a=(1 2 3 4 5 )

for (( i=0; i<=4; i++ ))

do

echo ${a[i]}

done

这将产生以下结果:

1

2

3

4

5

五:shell函数

使用函数来执行重复性的任务,是一个很好的方式来创建代码的重用。代码重用是现代面向对象编程的原则的重要组成部分。

1.创建函数:

声明一个函数语法:

function_name () {

list of commands

}

函数名function_name,这就是你将使用它从其他地方在你的脚本调用。函数名必须遵循括号内,后括号内的命令的列表。

例子:

#!/bin/bash

# Define your function here

Hello () {

echo "Hello World"

}

# Invoke your function

Hello

当你想执行上面的脚本,它会产生以下结果:

Hello World

2.参数传递给函数:

你可以定义一个函数,它接受参数,而调用这些函数。将这些参数代表$1,$2,依此类推。

例子:

#!/bin/bash

# Define your function here

Hello () {

echo "Hello World $1 $2"

}

# Invoke your function

Hello Zhang lisi

这将产生以下结果:

Hello World Zhang lisi

3.从函数的返回值:

例子:

#!/bin/bash

# Define your function here

Hello () {

echo "Hello World $1 $2"

return 1

}

# Invoke your function

Hello Zhangsan lisi

# Capture value returnd by last command r=$?

基于JavaScript(网页脚本语言)编写的万年历(含源文件)

《软件系列课程设计——基于JavaScript (网页脚本语言)编写的万年历》 班级 学号 姓名 指导教师 成绩______________________________ 2010年06 月18 日

目录 摘要………………………………………………………………………一、引言………………………………………………………………… 1.应用背景……………………………………………………… 2.可行性分析…………………………………………………… 3.研究路线及内容……………………………………………… 二、系统开发工具……………………………………………………… 三、系统设计(详细设计)……………………………………………… 四、结束语 1.总结………………………………………………………………… 2.参考文献…………………………………………………………… 摘要 极品万年历,带有带有电子时钟,可看不同时区时间,阳历、农历同步显示,鼠标指出,

天干地支计时即出。 一、引言 1,、应用背景 随着科技的发展,人们渴望着把现实生活中的林林总总都搬到电脑上,大到工程设计,小到极品万年历。 2、可行性分析 方便查看农历重要的日子,方便外出办公校正不同区时…… 3、研究路线及内容 通过用JavaScript语言编写代码,并利用文本保存为HTTP或HTML格式。并试图实现一下内容: 1、可看阳历; 2、可看农历; 3、可看时间; 4、可看天干地支计时; 5、可划分区时。 二、系统开发工具 JavaScript网页脚本语言,IE、360安全浏览器或其他浏览器。 三、系统设计 1、程序源码 cc万年历