北京pk10技巧

Linux 编程之shell入门基础

来源:互联网
更新时间:2018/2/9 2:40:14
责任编辑:鲁能
字体:

代码:--------------------------------------------------------------------------------1.建立和运行shell程序

什么是shell程序呢? 简单的说shell程序就是一个包含若干行

shell或者Linux命令的文件.

象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.

在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整

的程序文件.

执行shell程序文件有三种方法

(1)#chmod +x file

(2)#sh file

(3)# . file

在编写shell时,第一行一定要指明系统需要那种shell解释你的shell程序,如:#! /bin/bash,

#! /bin/csh,/bin/tcsh,还是#! /bin/pdksh .

2.shell中的变量

(1)常用系统变量

$ # :保存程序命令行参数的数目

$ ? :保存前一个命令的返回码

$ 0 :保存程序名

$ * :以("$1 $2...")的形式保存所有输入的命令行参数

$ @ :以("$1""$2"...)的形式保存所有输入的命令行参数

(2)定义变量

shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一

个变量赋值,实际上就是定义了变量.

在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.

如:

abc=9 (bash/pdksh不能在等号两侧留下空格 )

set abc = 9 (tcsh/csh)

由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放

整数.

如:

name=abc (bash/pdksh)

set name = abc (tcsh)

在变量赋值之后,只需在变量前面加一个$去引用.

如:

echo $abc

(3)位置变量

当运行一个支持多个命令行参数的shell程序时,这些变量的值将分别存放在位置变量里.

其中第一个参数存放在位置变量1,第二个参数存放在位置变量2,依次类推...,shell保留

这些变量,不允许用户以令外的方式定义他们.同别的变量,用$符号引用他们.

3.shell中引号的使用方法

shell使用引号(单引号/双引号)和反斜线("/")用于向shell解释器屏蔽一些特殊字符.

反引号(")对shell则有特殊意义.

如:

abc="how are you" (bash/pdksh)

set abc = "how are you" (tcsh)

这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.

abc1='@LOGNAME,how are you!' (bash/pdksh)

set abc1='$LOGNAME,how are you!' (tcsh)

abc2="$LOGNAME,how are you!" (bash/pdksh)

set abc2="$LOGNAME,how are you!" (tcsh)

LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是:wang.执行完两条命令后,

abc1的内容是:$LOGNAME, how are you!.而abc2的内容是;wang, how are you!.

象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽

一组字符.

反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将

一个命令的运行结果传递给另外一个命令.

如:

contents=`ls` (bash/pdksh)

set contents = `ls` (tcsh)

4.shell程序中的test命令

在bash/pdksh中,命令test用于计算一个条件表达式的值.他们经常在条件语句和循环

语句中被用来判断某些条件是否满足.

test命令的语法格式:

test expression

或者

[expression]

在test命令中,可以使用很多shell的内部操作符.这些操作符介绍如下:

(1)字符串操作符 用于计算字符串表达式

test命令 | 含义

-----------------------------------------

Str1 = str2 | 当str1与str2相同时,返回True

Str1! = str2| 当str1与str2不同时,返回True

Str | 当str不是空字符时,返回True

-n str | 当str的长度大于0时,返回True

-z str | 当str的长度是0时,返回True

-----------------------------------------

(2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数

test表达式 | 含义

---------------------------------------------

Int1 -eq int2|当int1等于int2时,返回True

Int1 -ge int2|当int1大于/等于int2时,返回True

Int1 -le int2|当int1小于/等于int2时,返回True

Int1 -gt int2|当int1大于int2时,返回True

Int1 -ne int2|当int1不等于int2时,返回True

-----------------------------------------

(3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等

test表达式 | 含义

------------------------------------------------

-d file |当file是一个目录时,返回 True

-f file |当file是一个普通文件时,返回 True

-r file |当file是一个刻读文件时,返回 True

-s file |当file文件长度大于0时,返回 True

-w file |当file是一个可写文件时,返回 True

-x file |当file是一个可执行文件时,返回 True

------------------------------------------------

(4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式

test表达式 | 含义

----------------------------------------------------------

! expr |当expr的值是False时,返回True

Expr1 -a expr2|当expr1,expr2值同为True时,返回True

Expr1 -o expr2|当expr1,expr2的值至少有一个为True时,返回True

-----------------------------------------------------------

注意:

tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh

支持的表达式于C中的表达式相同.通常使用在if和while命令中.

tcsh表达式 | 含义

-------------------------------------------------------

Int1 <= int2 |当int1小于/等于int2时,返回True

Int1 >= int2 |当int1大于/等于int2时,返回True

Int1 < int2 |当int1小于int2时,返回True

Int1 > int2 |当int1大于int2时,返回True

Str1 == str2 |当str1与str2相同时,返回True

Str1 != str2 |当str1与str2不同时,返回True

-r file |当file是一个可读文件时,返回True

-w file |当file是一个可写文件时,返回True

-x file |当file是一个可执行文件时,返回True

-e file |当file存在时,返回True

-o file |当file文件的所有者是当前用户时,返回True

-z file |当file长度为0时,返回True

-f file |当file是一个普通文件时,返回True

-d file |当file是一个目录时,返回True

Exp1 || exp2 |当exp1和exp2的值至少一个为True时,返回True

Exp1 && exp2 |当exp1和exp2的值同为True时,返回True

! exp |当exp的值为False时,返回True

5.条件语句

同其他高级语言程序一样,复杂的shell程序中经常使用到分支和循环控制结构,

bash,pdksh和tcsh分别都有两种不同形式的条件语句:if语句和case语句.

(1)if语句

语法格式:

bash/pdksh用法:

if [expression1]

then

commands1

elif [expression2]

commands2

else

commands3

if

tcsh用法:

if (expression1) then

commands1

else if (expression2) then

commands2

else

commands3

endif

含义:当expression1的条件为True时,shell执行then后面的commands1命令;当

expression1的条件为false并且expression2的条件满足为True时,shell执行

commands2命令;当expression1和expressin2的条件值同为false时,shell执行

commands3命令.if语句以他的反写fi结尾.

(2)case语句

case语句要求shell将一个字符串S与一组字符串模式P1,P2,...,Pn比较,当S与

某个模式Pi想匹配时,就执行相应的那一部分程序/命令.shell的case语句中字符

模式里可以包含象*这样的通配符.

语法格式:

bash/pdksh用法:

case string1 in

str1)

commands1;;

str2)

commands2;;

*)

commands3;;

esac

tcsh用法:

switch (string1)

case str1:

statements1

breaksw

case str2:

statements2

breaksw

default:

statements3

breaksw

endsw

含义:shell将字符串string1分别和字符串模式str1和str2比较.如果string1与str1匹配,则

shell执行commands1的命令/语句;如果string11和str2匹配,则shell执行commands2的命令/

语句.否则shell将执行commands3的那段程序/命令.其中,每个分支的程序/命令都要以两个

分号(;;)结束.

6.循环语句

当需要重复的某些操作时,就要用到循环语句.

(1)for语句

大家知道在很多编程语言中for语句是最常见.在shell中也不例外.for语句要求shell将包含

在这个语句中的一组命令连续执行一定的次数.

语法格式:

bash/pdksh

用法1:

for var1 in list

do

commands

done

含义:在这个for语句中,对应于list中的每个值,shell将执行一次commands代表的一组命令.

在整个循环的每一次执行中,变量var1将依此取list中的不同的值.

用法2:

for var1

do

setatements

done

含义:在这个for语句中,shell针对变量var1中的每一项分别执行一次statements代表的一组

命令.当使用这种形式的语句时,shell认为var1变量中包含了所有的位置变量,而位置变量中

存放着程序的命令行参数值.也就是说,他等价于下列形式:

for var1 in " $@"

do

statements

done

tcsh用法:

在tcsh中没有for这个单词,与for语句起同样功能的是foreach语句

foreach name (list)

commands

end

举例:

for file ;bash/pdksh

do

tr a-z A-Z<$file>file.caps

done

# ;tcsh

foreach file ( $ * )

tr a-z A-Z<$file>$file.caps

end

(2)while语句

while语句是shell提供的另一种循环语句. while语句指定一个表达式和一组命令.这个

语句使得shell重复执行一组命令,直到表达式的值为False为止.

语法格式:

while expression ;bash

do

statements

done

while (expression) ;tcsh

statements

end

举例:

count=1 ;bash

while [ -n "$ *"] ***

do

echo "this is a parameter number $count $1"

shift

count='expr $count + 1'

done

set count = 1 ;tcsh

while ( " $ * " ! = "")

echo "this is a parameter number $count $1"

shift

set count = 'expr $count + 1'

end

语句中shift命令的功能是将所有的命令行参数依次相左传递.

(3)until语句

until与while语句具有类似的语法格式和功能,不同的是while中expression的值为True时,

shell执行命令组;而until中当expression的值为False时,shell才执行那组命令.

语法格式:

until expression

do

commands

done

举例:

count=1

until [ -z " $ * "] ***

echo "this is a parameter number $count $1"

shift

count='expr $count + 1'

done

情注意上述例子中带***号.在while中的表达式: -n string,他的含义是当string不是空

字符串时,表达式的值为True;在until中的表达式: -z string,他的 含义是当string是空

字符串时,表达式的值为True.由此可见,两个程序对条件表达式的设置恰好是相反的.

(4)shift语句

bash和tcsh都支持shift命令.shift将存放在位置变量中的命令行参数,依次向左传递.例如

位置变量当前值为:

$1=file1 $2=file2 $3=file3

执行一次shift命令后,位置变量的值为:

$1=file2 $2=file3

还可以在shift命令中指定位置变量转移的次数, 如:

shift n

例子:

while [ "$1"]

do

if [ "$1"="-i"] then

infile=" $2"

shift 2

else if [ "$1"="-o"] then

outfile="$2"

shift 2

else

echo "Program $0 does not recognize option $1"

fi

done

tr a-z A-Z<$infile>$outfile

(5)select语句

select语句是pdksh提供的一个独特的循环语句.他不同于前面介绍的循环语句.他不是

反复计算一个条件表达式,并依据表达式的值决定是否执行一组命令.select的功能是自动的

生成一个简单的文本菜单.

语法格式:

select menu [in list_of_items]

do

commands

done

含义:当执行一个select语句时,pdksh分别为每个列在list_of_items中的成员建立一个菜单

选项.list_of_items既可以是一个包含多个选项的变量,也可以是直接列在程序中的一组选项

.如果语句中没有提供list_of_items,select语句将使用位置变量作为list_of_items.

举例:

select menuitem in pick1 pick2 pick3

do

echo "are you sure you want to pick $menuitem"

read res ;接收用户的输入,并且将输入的值存放在特定变量里.

if [ $res=" y" -o $res=" Y"]

then

break ;用于退出while,for,select等循环语句

fi

done

(6)repeat语句

repeat语句是tcsh提供的独有的循环语句.使用repeat命令要求shell对一个命令执行一定

的次数.

语法格式:

repeat count command

如;

foreach num ( $ *)

repeat $num echo -n " *"

echo " "

end

7.shell中的函数

shell允许用户定义自己的函数.函数是高级语言中的重要结构.shell中的函数于C或者其他

语言中定义的函数一样.与从头开始,一行一行地写程序相比,使用函数主要好处是有利于组织

整个程序.在bash中,一个函数的语法格式如下:

fname (){

shell comands

}

定义好函数后,需要在程序中调用他们.bash中调用函数的格式:

fname [parm1 parm2 parm3...]

调用函数时,可以向函数传递任意多个参数.函数将这些参数看做是存放他的命令行参数的

位置变量.

举例:

这个程序定义了4个函数:

upper ():将传递给他的文件中的字母转换成大写,并存放到同名的结尾为.out的文件中.

lower ():将传递给他的文件里的字母转换成小写,并存放到同名的结尾为.out的文件中.

print ():输出传递给他的文件的内容.

usage_error ():输出程序的帮助信息.

程序的主模块是个case条件语句,他根据命令行中第一个参数,决定程序要完成的功能,并调用相应

的函数完成这一功能.

upper (){

shift

for i

do

tr a-a A-Z<$!>$1.out

rm $1

mv $1.out $1

shift

done; }

lower () {

shift

for i

do

tr A-Z a-z<$1>$1.out

rm $1

mv $1.out $1

shift

done; }

print() {

shift

for i

do

lpr $1

shift

done; }

usage_error() {

echo " $1 syntax is $1 "

echo ""

echo " where option is one of the following"

echo " p--to print frame files"

echo " u--to save as uppercase"

echo " l--to save as lowercase";}

case $1 in

p | -p)print $@;;

u | -u)upper $@;;

l | -l)lower $@;;

*) usage_error $0;;

esac

------------------------------------------------------------------------------

总结

利用shell编程是提高系统管理工作效率的重要手段,学好shell跟了解系统基本命令和管理

工具的使用方法同样重要!

附:

A.bash中常用的命令

命令 | 含义

-------------------------------------------------------------------------------

Alias |设置命令别名

Bg |将一个被挂起的进程在后台执行

cd |改变用户的当前目录

exit |终止一个shell

export |使作为这个命令的参数的变量及其当前值,在当前运行的shell的子进程中可见

fc |编辑当前的命令行历史列表

fg |让一个被挂起的进程在前台执行

help |显示bash内部命令的帮助信息

history |显示最近输入的一定数量的命令行

kill |终止一个进程

pwd |显示用户当前工作目录

unalias |删除命令行别名

--------------------------------------------------------------------------------

B.bash中常用的系统变量

变量 | 含义

-------------------------------------------------------------------------------

EDITOR,FCEDIT |Bash的fc命令的默认文本编辑器

HISTFILE |规定存放最近输入命令行文件的名字

HISTSIZE |规定命令行历史文件的大小

HOME |当前用户的宿主目录

OLDPWD |用户使用的前一个目录

PATH |规定bash寻找可执行文件时搜索的路径

PS1 |命令行环境中显示第一级提示符号

PS2 |命令行环境中显示第二级提示符号

PWD |用户当前工作目录

SECONDS |当前运行的bash进程的运行时间(以秒为单位)

转自于 Xue163.com_Linux新手入门

根据您访问的内容,您可能还对以下内容感兴趣,希望对您有帮助:

Linux怎么进行基础Shell编程?

北京pk10技巧答:Shell程序一般被称为脚本,脚本也是一个程序,而每一个程序本身都是一个真值表达式,它的真值由其返回值决定,故Shell脚本应该返回一个值,若脚本未显式指定返回值,则自动使用最后一条命令的返回值,如果需要显式指定脚本的返回值,需要用exit...

学习linux shell 下的编程有什么用?

北京pk10技巧答:工作或者读书等)需要学习linux的人,需要系统的学习一下,最好有一本好的书来学习。 linux是世界各地的黑客们写出来的开源系统,对于热爱学习计算机技术(算法、数据结构、编程、操作系统……)的人来说,linux是一个天堂。 我个人就是完全因为兴...

学Linux shell编程需要其他语言基础吗?要不要数学?

答:shell属于linux操作系统的一部分。 如果吹毛求疵地说,它应该不算是一门语言。 但是,因为它确实可以完成一些语言可以完成的工作,所以人们将写shell脚本说成“shell编程” 其实,单论shell,它不过是对linux系统的一些核心操作而已,如果你想要实...

学习linux shell 下的编程有什么用?

答:工作或者读书等)需要学习linux的人,需要系统的学习一下,最好有一本好的书 来学习。 linux是世界各地的黑客们写出来的开源系统,对于热爱学习计算机技术(算法、 数据结构、编程、操作系统……)的人来说,linux是一个天堂。 我个人就是完全因为...

linux 怎么进入shell编程模式

答:打开一个文本编辑器就进入shell编程模式了。甚至你可以用here文档方式在直接在终端下进入编辑模式: $ cat Working dir $PWD > EOF Working dir /home/user 上面的模式等价于: cat Working dir $PWD

Linux Shell编程从初学到精通的目录

北京pk10技巧答:《linux shell编程从初学到精通》第1章 shell脚本编程概述 11.1 linux和shell概述 21.1.1 linux简介 21.1.2 shell简介 31.2 shell脚本编程的优势 51.3 第一个shell脚本例子 61.3.1 shell脚本的基本元素 61.3.2 执行shell脚本 71.4 本章小结 8第2...

学习Linux必须要学习shell编程吗?

北京pk10技巧答:兄弟连的老师说,不能拿学习其它编程语言的概念来学习shell,学习shell,主要就是学会linux下各种工具的使用,然后用shell语言把他们联合起来达到一定的目的。

linux 怎么进入shell编程模式

答:1.先打开终端:ctrl+art+t 快捷键即可以打开; 2.进入所在目录:cd命令; 3.编辑:vi 或者 vim 举例:在/home/根目录有test.txt文件,要编辑它 1.打开终端 2.cd /home/ 3.vi test.txt 即可

linux命令行与shell脚本编程大全要什么基础

答:最好么有RHCE的基础; 或者看完两本鸟哥的基础

linux shell编程从初学到精通 哪个好

答:教材其实都差不多,大多从基础开始,然后深入一点就是grep 、awk、sed联合正则表达式使用,最后就是综合性实例学习

Linux怎么进行基础Shell编程?

如果需要显式指定脚本的返回值,需要用exit命令实现;然后是定义函数、条件测试和特定的流程控制语句,具体的使用步骤可以去看看ZLG《嵌入式Linux开发上册》对Shell编程讲...

学Linux shell编程需要其他语言基础吗?要不要数学?

所以人们将写shell脚本说成"shell编程" 其实,单论shell,它不过是对linux系统的一些核心操作而已,如果你想要实现更加具体化的东西,就需要一些其它语言的辅助了,比如shell可以...

学习linux shell 下的编程有什么用?

北京pk10技巧linux是一个天堂。 我个人就是完全因为兴趣而捣鼓linux,和工作不沾边。 有几种不同的学习: a)使用->需要学习linux的一些历史、各种命令、桌面的操作、shell的知识 b)编程-...

linux命令行与shell脚本编程大全要什么基础

最好么有RHCE的基础; 或者看完两本鸟哥的基础

学习LINUX shell 脚本编程的书籍

北京pk10技巧Line and Shell Scripting Bible > > ,网上有pdf下载。 这本书也很全面。适合那些喜欢一章一章看书的人去学,印刷质量相当的好。 4. < < LINUX与UNIX Shell编程指南 &...

学习LINUX shell 脚本编程的书籍

北京pk10技巧<<Linux Shell编程>><<Linux系统管理/red hat9从入门到精通>><<24小时精通UNIX shell编程《精通UNIX Shell 脚本编程》  这些都可以买到..到当地...

学习LINUX shell 脚本编程的书籍

北京pk10技巧26第3章 Linux编程环境 283.1 Linux常用工具 283.1.1 Shell简介 283.1.2 常用Shell命令 ... Linux系统启动、Linux系统管理和维护、Linux服务器配置、shell编程、Linux C语言基础...

我想学习linux 的shell编程 看什么书比较好呢 视频教程也行

一是 《鸟哥的LINUX私房菜》 基础要扎实 平时要多用LINUX,最好是每天用,最好是字符界面。 二是推荐《Linux Shell脚本攻略》 印度人写的,很不错。 最后尝试用shell写一些小...

linux那么多shell编程和命令怎么去记,目前要达到能通过笔试和...

学习的时候你可能需要记住很多很多的命令和参数,但是实际工作中可能你需要用到的命令可能会非常有限,但是会更深,更专一一些

Linux shell 编程主要是做什么的?

所以主要还是当作类似 Windows 下面批处理一类的东西。 当然 shell 功能要比批处理功能更多,类似 Windows 下面的脚本吧。 其实 shell 编程写出来的就叫做"脚本"。 我...


网友评论
最新添加资讯
24小时热门资讯
娱乐时尚
科技资讯
历史文化
真视界
旅游美食
精彩图文
我爱我车
母婴健康
Copyright © 2004-2018 xue163.net All Rights Reserved. 学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
北京pk10开奖记录-联盟欢迎您 北京pk10开奖记录-联盟欢迎您 北京pk10开奖记录-联盟欢迎您 北京pk10开奖记录-联盟欢迎您 北京pk10开奖记录-联盟欢迎您 document.write ('');