1、环境变量用户自定义变量位置参数预定义变量参数置换变量5.3.2 环境变量定义常用的shell环境变量HOMEPATHTERMUIDPWDPS1PS2IFSLOGINSHELL具体说明1、更改环境变量PATH=$PATH:$HOME/binPATH=$PATH:/home/jhy/bin2、配置历史命令环境Bash使用主目录下的文件.bash_history设置环境变量$HISTFILE=“/home/jhy/.myhistory”$HISTSIZE=6003、引号的使用(shell中的特殊字符)双引号 除$、以外的字符均为普通字符cat ex3echo “current directory i
2、s pwdecho “home directory is $HOME”单引号 所有字符字符均为普通字符$str=echo “directory is $HOME”倒引号echo “directory $HOME“4、命令执行操作符1 顺序执行:命令之间用;号隔开Exp: who|wc -l2 逻辑与&:命令1&命令2 命令1成功后执行命令2 mkdir /ll&cd /ll Cp ex1 ex10 & rm ex13 逻辑或|:命令1|命令2 命令1不成功后执行命令2 mkdir /ll|cd /ll5、成组命令(1)大括号形式: 大括号括起来的全部命令可视为语法上的一条命令 左大扩号后有空格
3、 右大扩号前有;号 Notice:此成组命令只在本SHELL内有效 Exp: a=”aaaaa” a=”bbbb”;echo $a; (2)圆括号()形式: 左大扩号后无空格,右大扩号前无; 不改变父shell的变量值及工作目录Notice:此成组命令只在子SHELL内有效 echo $a 5.3.3 用户自定义变量(1)语法规则变量名=变量值数组下标值说明:等号两端不能保留空格用单引号引用字符定义变量时,变量名前不加$符号(2)变量赋值 Myname=sanjuMyname=sanju gnha(3)引用变量的值()变量作为字符串存储时,两个变量连在一起#x=hello#y=world#ec
4、ho $x$y()变量前后出现字符串时,变量用大扩号括起来。$uid=501 $echo $uidofme 不对 $echo $uidofme 正确()可设置变量为只读readonly变量名()变量的作用域:局部变量与全局变量#export变量名EXP:$ux=LINUX$echo $ux$ vi shecho $ux$ bash shexport ux(4)命令替换方法一:用倒引号#dir=pwd方法二:$(用分号隔开的命令表) $ dir=$(pwd)$ echo $(pwd;cd /home/jhy;ls l)()数组只有一位数组,且没有限定数组的大小数组下标由0开始下标可以是整数、算术
5、表达式。()定义 declare a 数组名()赋值 格式1:$数组名下标=值格式2:数组名(值 值 。)各值用空格隔开()读值$数组名下标(d)使用*、作为下标代替数组中的所有元素 week=(1 2 3) week5=5 week4=4 echo $week*(e)取消数组的定义 unset week2unset week unset week*(6)变量引用数组变量的引用$name*与$name“$name*”与”$name”2 表达式$name#patten和$name#pattencd /kk/mmecho $PWDecho $PWD#*/echo $PWD#*/3 表达式$name
6、%patten和$name%pattenfile=k.mm.c echo file%*.c echo file%*.c4 表达式$#name*表示数组中已设置的元素的个数5 表达式$#namei 表示数组中I个元素的长度5.3.位置参数1、 定义中的可以带实参,变量名为,叫位置参数。各参数之间用空格隔开 2、 用为位置参数赋值()set kk sscat $1 $2 $3 |wc l其中,kk,ss为文件名3、 命令移动位置参数位置参数右移一位5.3.预定义变量定义的有特殊含义的变量,用户不能更改命名特点:$符号2、 常见的预定义变量()$ 不包含脚本名的命令行中参数的个数()$? 上一条命令
7、执行后的返回值(3)$0 shell的执行命令名称(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置换变量。否则不进行置换。54
8、 Shell的算术运算及内部命令541 算术运算算术运算的命令:1etlet arg (1) arg是单独的算术表达式。使用C语言中表达式的语法、优先级和结合性。除+、和逗号(,)之外,所有整型运算符都得到支持。let “v=5*6” Echo $v(2) 命名的参数可以在算术表达式中直接利用名称访问,不要前面带有“$”符。(3) 算术表达式按长整数进行求值,并不检查溢出。(4) 表达式中有特殊字符时,必须用双引号括起来。Let “v=6|5”Echo $v(5) let命令的等价形式(),其中的算术表达式可不用双引号括起来。 (v=6+9) Echo v(6) 可以用(算术表达式)取代let
9、出现的地方,但只能包含一个算术表达式;只有使用$(算术表达式)才可返回其值。 echo “$(6+9)” Echo $6+7542 Shell的内部命令1、 echo2、 eval(命令的多重替换)格式: eval argumentl argument2 . 将其后的参数组合起来,成为一个命令然后执行若干个命令。(可以利用别的命令作为参数)例如: D=”ls la” eval $D /tmp 等价于 ls la/tmp3、 exec exec command command argument 这个命令就是执行其后的命令,当执行完后,停止当前的进程,在exec命令后的命令都不会执行4、 expo
10、rt从父进程传递给子进程一个变量名数值的列表在父进程中,通过把用户定义的Shell变量放在命令export值后作为参数,这些变量可以由子进程来继承但父进程不能访问子进程中的变量其命令格式为: export 变量名export 变量名=变量值执行export命令可显示经export命令定义过的变量。5、 readonly readonly=变量名不带参数的readonly,将显示所有只读的shell变量6、 read从标准输入中读取一行分成若干个字,并赋值给Shell程序中定义的变量在读取到文件尾前,read返回值为0,表示读成功;当读到文件尾时read返日值为1,表示读完命令格式如下: rea
11、d 变量名表7、 shiftshift命令使所有的位置参数依次向左移动一个位置,并使位置参敷的数量$0减1,直到零为止。8、 exit9、 .使Shell读人指定的Shell程序文件并依次执行文件中所有的语句,就是说Shell程序文件中列出的所有命令都是在点命令中输入的该命令格式如下: Shell程序文件名 当可执行程序的目录没有被放人系统目录时,用户希望运行可执行命令则必须使用: . /可执行程序名点命令就像交互式程序设计语言中的子程序调用。55 程序控制语句551 条件测试1、 概述shell不用布尔表达式而用命令和字符串表达条件值方法一:用test语句方法二:用一对方括号将测试条件括起来
12、方法三:测试条件2、测试语句test 格式:test 表达式 (1)当表达式的值是真时,返回状态0 当表达式的值是假时,返回状态非0(2)最好用双引号将test中出现的变量引起来 exp: test r “test1”(3)可组合多个表达式,各表达式之间用逻辑运算符隔开。Exp1 a exp2 与运算Exp1 o exp2 或运算!exp 非运算优先级的问题(4)检测三种不同类型的表达式: 检验文件的特性、比较字符串、比较数值检验文件的特性:(P214) test 选项 文件名exp: test f “test1” 检测test1文件是否是普通文件比较字符串: 字符串是普通字符串或变量比较数值:2、 if语句格式:if 测试条件then 命令串1else 命令串2fi(1) Else 部分可以是else if结构,用关
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1