基础知识
当前位置:首页 > 公文写作 > 基础知识 > 列表页

脚本语言基础知识

小草范文网  发布于:2016-10-31  分类: 基础知识 手机版

篇一: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)算术运算符

篇二:四 学习 shell脚本之前的基础知识

学习 shell脚本之前的基础知识

日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员。目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目。有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富。笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多。笔者在这一章中并不会多么详细的介绍shell脚本,而只是带你进入shell脚本的世界,如果你很感兴趣那么请到网上下载相关的资料或者到书店购买相关书籍吧。

在学习shell 脚本之前,需要你了解很多关于shell的知识,这些知识是编写shell脚本的基础,所以希望你能够熟练的掌握。

【什么是shell】

简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

笔者接触的linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢?

1)记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

与命令历史有关的有一个有意思的字符那就是”!”了。常用的有这么几个应用:(1)!! (连续两个”!”),表示执行上一条指令;(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3)!字符串(字符串大于等于

1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

2)指令和文件名补全

在本教程最开始笔者就介绍过这个功能了,记得吗?对了就是按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。连续按两次tab键,系统则会把所有的指令或者文件名都列出来。

3)别名

前面也出现过alias的介绍,这个就是bash所特有的功能之一了。我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias :

看到了吧,系统预设的alias指令也就这几个而已,你也可以自定义你想要的指令别名。alias语法很简单,alias [命令别名]=[’具体的命令’]。

4)通配符

在bash下,可以使用*来匹配零个或多个字符,而用

?

匹配一个字符。

5)输入输出从定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>,稍后会详细介绍。

6)管道符

前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令。

7)作业控制。

当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

【变量】

前面章节中笔者曾经介绍过环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的。变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定。因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接敲命令名即可。你可以使用echo

命令显示变量的值。

除了PATH, HOME, LOGNAME外,系统预设的环境变量还有哪些呢?

使用env命令即可全部列出系统预设的全部系统变量了。不过登录的用户不一样这些环境变量的值也不一样。当前显示的就是root这个账户的环境变量了。下面笔者简单介绍一下常见的环境变量:

PATH 决定了shell将到哪些目录中寻找命令或程序

HOME 当前用户主目录

HISTSIZE 历史记录数

LOGNAME 当前用户的登录名

HOSTNAME 指主机的名称

SHELL

前用户Shell类型

LANG 语言相关的环境变量,多语言可以修改此环境变量

MAIL 当前用户的邮件存放目录

PWD 当前目录

env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。

限于篇幅,笔者在上例中并没有把所有显示结果都截图。set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来。用户自定义变量?是的,用户自己同样可以定义变量。

虽然你可以自定义变量,但是该变量只能在当前shell中生效,不信你再登录一个shell试试?

使用bash命令即可再打开一个shell,此时先前设置的myname变量已经不存在了,退出当前shell回到原来的shell,myname变量还在。那要想设置的变量一直生效怎么办?有两种情况

1) 要想系统内所有用户登录后都能使用该变量

需要在/etc/profile文件最末行加入 “export myname=Aming” 然后运行”source /etc/profile”

可以生效了。此时你再运行

bash命令或者直接su - test账户看看。

篇三:Shell脚本必备基础知识

SHELL 编程基础知识Linux 中有几种不同的 shell, 但是通常我们使用 bash (bourne again shell) 进行 shell 编程, 因为 bash 是免费的并且很容易使用。 所以在本文中笔者所提供的脚本都是使用 bash (但 是在大多数情况下,这些脚本同样可以在 bash 的大姐,bourne shell 中运行) 。1 建立一个脚本1.1 文字编辑器如同其他语言一样,我们需要使用文字编辑器,比如 nedit、kedit、emacs、vi 等来编写我 们的 shell 程序。1.2 程序首行程序必须以下面的行开始(必须在文件的第一行) :#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh 来执行程序。1.3 如何执行脚本当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行:chmod +x filename 然后,您可以通过输入: ./filename 来执行您的脚本。1

2 shell 编程2.1 注释在进行 shell 编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程 序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的 时间内明白该脚本的作用及工作原理。2.2 变量和引用2.2.1 本地变量变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z) 中间不能有空格,可以使用下划线(_) 不能使用标点符号 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)给变量赋值: 不需要对变量进行声明。要赋值给一个变量,您可以这样写:变量名=值注意: 给变量赋值的时候,不能在"="两边留空格 取变量值: 取出变量值可以加一个美元符号($)在变量前面。 有许多变量是系统自动设定的,这将在后面使用这些变量时进行讨论。#!/bin/sh #对变量赋值: a="hello world" # 现在打印变量 a 的内容: echo "A is:" echo $a #echo ${a}与之结果相同在您的编辑器中输入以上内容,然后将其保存为一个文件 first。之后执行 chmod +x first 使其可执行,最后输入./first 执行该脚本。2

这个脚本将会输出: A is: hello world使用花括号避免变量名与其他文字混淆:num=2 echo "this is the $numnd"这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为 shell 会去搜 索变量 numnd 的值, 但是这个变量是没有值的。 可以使用花括号来告诉 shell 我们要打印的是 num 变量:num=2 echo "this is the ${num}nd"这将打印: this is the 2nd 注意花括号的位置:num=2 echo "this is the {$num}nd"其输出结果为:this is the {2}nd 显示本地变量 格式: set清除本地变量 格式:unset variable-nameShell 的赋值方式: 需要注意 shell 的默认赋值是字符串赋值。比如:var=1 var=$var+1 echo $var打印出来的不是 2 而是 1+1。为了达到我们想要的效果有以下几种表达方式:let "var+=1" var=$[$var+1] var=?expr $var + 1?#注意加号两边的空格,否则还是按照字符串的方式赋值。3

注意:前两种方式在 bash 下有效,在 sh 下会出错。 let 表示数学运算 expr 用于整数值运算,每一项用空格隔开 $[]将中括号内的表达式作为数学运算先计算结果再输出。 Shell 脚本中有许多变量是系统自动设定的,我们将在用到这些变量时再作说明。2.2.2环境变量除了一般的仅在程序内有效的 shell 变量以外,还有环境变量。由 export 关键字处理过的变 量叫做环境变量。通常情况下仅仅在登录脚本中使用环境变量。 定义环境变量 格式: export variable-name=value (与本地变量的定义相比,多了一个 export 关键 字) export DOMAIN="chinaitlab.com"显示环境变量 格式: env (本地变量的显示使用 set,环境变量的显示使用 env)清除环境变量 格式:unset variable-name (用法与本地变量相同,都使用 unset)2.2.3位置变量位置变量:$0,$1,$2,$3??$9 $0 $1 $2 Shell Script 文件名 第一个参数 第二个参数位置参数可以用 shift 命令左移。比如 shift 3 表示原来的$4 现在变成$1,原来的$5 现在 变成$2 等等,原来的$1、$2、$3 丢弃,$0 不移动。不带参数的 shift 命令相当于 shift 1。mypgm2 的示范例子:# mypgm2 echo “Number of parameters is” $# echo “Program name is” $04

echo “Parameters as a single string is” $*在 bash 中,从命令行中执行 mypgm2 如下:#. mypgm2 sanjia guha Number of parameters is 2 Program name is mypgm2 Parameters as a single string is sanjia guha2.2.4只读变量注意:只读变量不能被清除和改变其值,所以要谨慎使用。2.2.5特殊变量参数处理 $# $@ $* $$ $! $$? $0 $1、$2说明 传递到脚本的参数个数,相当于 C 语言 main 函数的 argc - 1 所有脚本的命令行参数,它们分别被双引号引住,如"$1" 例如可以用在 for 循环中的 in 后面。 以一个单字符串显示所有向脚本传递的参数,例如“$1 脚本运行的当前进程 ID 号 后台运行的最后一个进程的 ID 号 显示 Shell 使用的当前选项,与 set 命令功能相同。 显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。 Shell Script 文件名,相当于 C 语言 main 函数的 argv[0] 位置参数(Positional Parameter),相当于 C 语言 main 函数的 argv[1]、argv[2]... $2 $3” "$2" “$3” ...#test.sh 1 2 3 $*为"1 2 3" $@为"1" "2" "3"#运行脚本 test.sh (一起被引号包住) (分别被包住)5

本文已影响