SHELL程序设计Word格式文档下载.docx
《SHELL程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SHELL程序设计Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
环境变量
用户自定义变量
位置参数
预定义变量
参数置换变量
5.3.2环境变量
定义
常用的shell环境变量
HOME
PATH
TERM
UID
PWD
PS1
PS2
IFS
LOGIN
SHELL
《具体说明》
1、更改环境变量
PATH=$PATH:
$HOME/bin
PATH=${PATH}:
/home/jhy/bin
2、配置历史命令环境
Bash使用主目录下的文件
.bash_history
设置环境变量
$HISTFILE=“/home/jhy/.myhistory”
$HISTSIZE=600
3、引号的使用(shell中的特殊字符)
双引号
除$、’、`、\以外的字符均为普通字符
catex3
echo“currentdirectoryis‘pwd‘
echo“homedirectoryis$HOME”
单引号
所有字符字符均为普通字符
$str=’echo“directoryis$HOME”’
倒引号
echo“directory‘$HOME‘“
4、命令执行操作符
1顺序执行:
命令之间用;
号隔开
Exp:
who|wc-l
2逻辑与&
&
:
命令1&
命令2
命令1成功后执行命令2
mkdir/ll&
cd/ll
Cpex1ex10&
rmex1
3逻辑或||:
命令1||命令2
命令1不成功后执行命令2
mkdir/ll||cd/ll
5、成组命令
(1)大括号{…}形式:
大括号括起来的全部命令可视为语法上的一条命令
左大扩号后有空格
右大扩号前有;
号
Notice:
此成组命令只在本SHELL内有效
Exp:
a=”aaaaa”
{a=”bbbb”;
echo$a;
}
(2)圆括号()形式:
左大扩号后无空格,右大扩号前无;
不改变父shell的变量值及工作目录
Notice:
此成组命令只在子SHELL内有效
}
echo$a
5.3.3用户自定义变量
(1)语法规则
变量名=变量值
数组[下标]=值
说明:
等号两端不能保留空格
用单引号引用字符
定义变量时,变量名前不加$符号
(2)变量赋值
Myname=sanju
Myname=‘sanjugnha’
(3)引用变量的值
(a)变量作为字符串存储时,两个变量连在一起
#x=hello
#y=world
#echo$x$y
(b)变量前后出现字符串时,变量用大扩号括起来。
$uid=501
$echo$uidofme不对
$echo${uid}ofme正确
(c)可设置变量为只读
readonly变量名
(d)变量的作用域:
局部变量与全局变量
#export变量名
EXP:
$ux=LINUX
$echo$ux
$vish
echo$ux
$bashsh
exportux
(4)命令替换
方法一:
用倒引号`
#dir=`pwd`
方法二:
$(用分号隔开的命令表)
$dir=$(pwd)
$echo$(pwd;
cd/home/jhy;
ls–l)
(5)数组
只有一位数组,且没有限定数组的大小
数组下标由0开始
下标可以是整数、算术表达式。
(a)定义
declare–a数组名
(b)赋值
格式1:
$数组名[下标]=值
格式2:
数组名=(值1值2。
。
)各值用空格隔开
(c)读值
${数组名[下标]}
(d)使用*、@作为下标代替数组中的所有元素
week=(123)
week[5]=5
week[4]=4
echo${week[*]}
(e)取消数组的定义
unsetweek[2]
unsetweek
unsetweek[*]
(6)变量引用
①数组变量的引用
${name[*]}与${name[@]}
“${name[*]}”与”${name[@]}”
2表达式${name#patten}和${name##patten}
cd/kk/mm
echo$PWD
echo${PWD#*/}
echo${PWD##*/}
3表达式${name%patten}和${name%%patten}
file=k.mm.c
echo{file%*.c}
echo{file%%*.c}
4表达式${#name[*]}表示数组中已设置的元素的个数
5表达式${#name[i]}表示数组中I个元素的长度
5.3.4位置参数
1、定义
linux中的shell可以带实参,变量名为0,1,2,叫位置参数。
各参数之间用空格隔开
ext m1 m2 m3
$0$1$2
2、用set为位置参数赋值(p196)
setkkss
cat$1$2$3|wc–l
其中,kk,ss为文件名
3、shift命令移动位置参数
位置参数右移一位
5.3.5预定义变量
shell定义的有特殊含义的变量,用户不能更改
命名特点:
$符号
2、常见的预定义变量
(1)$#不包含脚本名的命令行中参数的个数
(2)$?
上一条命令执行后的返回值
(3)$0shell的执行命令名称
(4)$!
后台运行的最后一个进程号
(5)$*所有位置参数的名称
(6)$$当前进程的进程号
5.3.6参数置换变量
1、定义
用户根据条件的不同给变量赋不同的值
2、种类
(1)变量=${位置参数号-word}
有位置参数,置换变量。
否则,用word置换变量
dir=${1-$HOME}
(2)变量=${参数=word}
有参数,置换变量。
dir1=${DIR=$HOME}
(3)变量=${参数?
word}
否则,显示word并退出SHELL。
若无word,显示标准信息。
S=${2?
ggghhhhh}
(4)变量=${参数+word}
有参数,用word置换变量。
否则不进行置换。
5.4Shell的算术运算及内部命令
5.4.1算术运算
算术运算的命令:
1et
letarg…
(1)arg是单独的算术表达式。
使用C语言中表达式的语法、优先级和结合性。
除++、·
—和逗号(,)之外,所有整型运算符都得到支持。
let“v=5*6”
Echo$v
(2)命名的参数可以在算术表达式中直接利用名称访问,不要前面带有“$”符。
(3)算术表达式按长整数进行求值,并不检查溢出。
(4)表达式中有特殊字符时,必须用双引号括起来。
Let“v=6|5”
Echo$v
(5)let命令的等价形式((…)),其中的算术表达式可不用双引号括起来。
((v=6+9))
Echov
(6)可以用((算术表达式))取代let出现的地方,但只能包含一个算术表达式;
只有使用$((算术表达式))才可返回其值。
echo“$((6+9))”
Echo$[6+7]
5.4.2Shell的内部命令
1、echo
2、eval(命令的多重替换)
格式:
evalargumentlargument2...
将其后的参数组合起来,成为一个命令.然后执行若干个命令。
(可以利用别的命令作为参数)例如:
D=”ls–la”
eval$D/tmp
等价于
ls–la/tmp
3、exec
execcommandcommandargument
这个命令就是执行其后的命令,当执行完后,停止当前的进程,在exec命令后的命令都不会执行.
4、export
从父进程传递给子进程一个变量名/数值的列表.在父进程中,通过把用户定义的Shell变量放在命令export值后作为参数,这些变量可以由子进程来继承.但父进程不能访问子进程中的变量.其命令格式为:
export变量名
export变量名=变量值
执行export命令可显示经export命令定义过的变量。
5、readonly
readonly=变量名
不带参数的readonly,将显示所有只读的shell变量
6、read
从标准输入中读取一行分成若干个字,并赋值给Shell程序中定义的变量.在读取到文件尾前,read返回值为0,表示读成功;
当读到文件尾时.read返日值为1,表示读完.命令格式如下:
read变量名表
7、shift
shift命令使所有的位置参数依次向左移动一个位置,并使位置参敷的数量$0减1,直到零为止。
8、exit
9、.
使Shell读人指定的Shell程序文件并依次执行文件中所有的语句,就是说Shell程序文件中列出的所有命令都是在点命令中输入的.该命令格式如下:
.Shell程序文件名
当可执行程序的目录没有被放人系统目录时,用户希望运行可执行命令则必须使用:
./可执行程序名
点命令就像交互式程序设计语言中的子程序调用。
5.5程序控制语句
5.5.1条件测试
1、概述
shell不用布尔表达式而用命令和字符串表达条件值
方法一:
用test语句
方法二:
用一对方括号将测试条件括起来
方法三:
[[测试条件]]
2、测试语句test
格式:
test表达式
(1)当表达式的值是真时,返回状态0
当表达式的值是假时,返回状态非0
(2)最好用双引号将test中出现的变量引起来
exp:
test–r“test1”
(3)可组合多个表达式,各表达式之间用逻辑运算符隔开。
Exp1–aexp2与运算
Exp1–oexp2或运算
!
exp非运算
优先级的问题
(4)检测三种不同类型的表达式:
检验文件的特性、比较字符串、比较数值
检验文件的特性:
(P214)
test选项文件名
exp:
test–f“test1”检测test1文件是否是普通文件
比较字符串:
字符串是普通字符串或变量
比较数值:
2、if语句
格式:
if测试条件
then命令串1
else命令串2
fi
(1)Else部分可以是elseif结构,用关