一、变量1.1变量命名规则以字符或下划线开头,名称中间可由字母、数字、下划线组成;变量的长度不超过255个字符;该名称在有效范围内必须是唯一的;//如果再次定义,会替换掉之前变量的值。在Bash中,变量的默认类型是字符串。//即系统将所有值作为字符串放入变量中,而不管“字符串”实际上是否为整数、浮点数等。1.2变量类型1.2.1用户自定义变量1.变量=valuee.gx=5注意变量名只能由字母、下划线和数字组成,不能以数字开头。=号两边不能有空格2.""会解析特殊符号,比如$,''不会解析特殊符号3.引用变量:$变量名,例如:$x4.默认值所有变量都是字符串类型,不能用于数学运算。5.变量叠加e.gy="$x"123ory=${x}1236.查看variableset会列出系统中的所有变量,包括环境变量和自定义变量set-u//调用时设置有的时候没有变量,会提示错误7.删除变量unset变量名,例如:unsetx注意没有$。1.2.2环境变量1.2.2.1环境变量与用户自定义变量的区别环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前shell中生效,环境变量在当前shell和该shell的所有子shell中生效。1.2.2.2自定义环境变量export变量名=变量值或变量名=变量值export变量名1.2.2.3查看环境变量集查看所有变量env查看环境变量1.2.2.4删除环境变量unset环境名1.2.2.5常用used环境变量HOSTNAME:主机名SHELL:当前shellTERM:终端环境HISTSIZE:历史命令数SSH_CLIENT:当前使用ssh连接的运行环境,这里是记录客户端ipSSH_TTY:ssh连接的终端是pts/1USER:当前登录的用户PATH:系统搜索命令的路径通过脚本名直接执行自己的脚本:(1)将脚本复制到PATH中的任意目录下(不推荐),例如:cphello.sh/bin/(2)将脚本所在目录添加到PATH变量中(变量叠加),例如:PATH="$PATH":/root/sh,但系统重启后会失效。PS1:命令提示符设置\d:以“周月日”格式显示日期\H:显示完整的主机名\t:以“HH:MM:SS”格式显示24小时制\A:显示24小时时间,格式为"HH:MM"\u:显示当前用户名\w:显示当前目录的全名\W:显示当前目录的最后一个目录\$:提示符。root用户为“#”,普通用户为“$”1.2.3语言变量当前语言查询:locale//LANG变量(默认语言)直接生效LC_ALL:定义全局语言(不常用)echo$LANG//CurrentLanguageenvironmentecho$LC_ALL//整体语言环境locale-a|more查看linux支持的所有语言环境cat/etc/sysconfig/i18n//下次开机后的系统环境LANG=zh_CN.UTF-8//切换到中文1.2.4位置参数变量$n:n是一个数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十多个参数需要用大括号括起来,比如${10}。$*:该变量代表命令行中的所有参数,$*将所有参数视为一个整体。$@:这个变量也代表了命令行中的所有参数,但是$@对每个参数分别对待。$#:这个变量表示命令行中所有参数的个数。例1:#!/bin/bashnum1=$1num2=$2sum=$(($num1+$num2))变量sum的和为num1加上num2echo$sum打印变量sum的值。linux默认变量都是字符串,所以使用两个(()来执行操作。执行脚本:$./test.sh4576例子2:#!/bin/bashecho"共有$#个参数"#使用$#来表示所有参数个数echo"Theparametersis:$*"#用$*表示所有参数echo"Theparametersis:$@"#用$@表示所有参数执行脚本:$./test.sh11223344例3:$*和$的区别@#!/bin/bashforiin"$*"#将$*中的所有参数看成一个整体,所以这个for循环只会循环一次doecho"Theparametersis:$i"doneforyin"$@"#$@中的每个参数都被认为是独立的,所以如果$@中有多个参数,就会循环多次。:||-->ls||echoyes在下一条语句执行之前,前一条语句是否正确执行,这里通过执行命令的返回值来判断,逻辑和:&&-->lsqwe&&echono也是一样的。可以用一个简单的shell来显示:sl.sh:#!/bin/bashehco"dangqiandePID:$$"find/hello.sh&//&放在后台执行echo"houtaidePID:$!"chmod755sl.sh,然后执行:./sl.sh;可以得到当前的测试结果read-nread-p"pleaseinputname"name#-p表示输出提示信息read[option]variablenameread-t30#-t表示等待时间单位为秒-t30表示30秒,如果30秒后没有数据输入,则脚本终止执行read-s#hiddeninformationecho-e"\n"linebreakread.sh:#!/bin/bashread-p"pleaseinputyourname:"-t30name#等待输入,如果超过30秒不输入,当前命令将终止echo$nameread-p"pleaseinputyourpassword:"-spwd#input该值是隐藏不可见的,但在sh中仍然可以获取到,输出echo-e"/n"echo$pwdread-p"pleaseinputyoursex[M/F]:"-n1sex#表示只能输入一个字符,立即执行echo-e"/n"echo$sexchmod755read.sh--->./read.sh2.OperatorShell变量弱类型,默认字符串变量.2.1declare声明变量类型declare[+/-][options]变量名选项:-设置变量类型属性+取消变量类型属性-a声明变量为数组类型-i设置变量为整型(integer)-x声明为环境变量-r设置为只读属性-p显示指定变量的声明类型2.1.1declarearray变量定义数组:movie[0]=zpmovie[1]=tpdeclare-amovie[2]=live调用数组:echo${movie}表示调用第一个echo${movie[1]}表示调用第二个echo${movie[*]}表示显示数组中的所有元素2.1.2声明环境变量declare-xtest=123与export效果相同。export命令的实际过程是调用declare命令列出系统中所有变量的类型:declare-p2.2数值计算方法2.2.1方法一aa=11bb=22declare-icc=$aa+$bb2.2.2方法二a=11b=22dd=$(expr$aa+$bb)注意:+后面必须有一个空格。2.2.3方法三gg=$(($aa+$bb))//推荐使用此方法gg=$[$aa+$bb]注:$var=$(command)//先执行命令,再执行将结果发送给变量。gg=$(date)//将系统函数的输出值复制到gg2.3变量testunsetyx=${y-2}echo$x-->x=2y=""-->setthevalueofytoEmptyvaluex=${y-2}echo$x-->x=emptyy=1x=${y-2}echo$x-->x=1三、环境变量配置文件3.1环境介绍变量配置文件用户自定义变量(局部变量)环境变量:定义每个用户的运行环境,PATHPS1eg:echo$PS1\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h\[\e[35;40m\]\W\[\e[0m\]]\$重新配置配置文件:source+配置文件或.配置文件例如:[root@centos~]#..bashrc[root@centos~]#source.bashrc环境变量配置文件介绍:PATHHISTSIZEPS1HOSTNAME环境变量配置文件主要是定义对系统运行环境system生效的系统默认环境变量~代表home每个用户都会有一个目录,主目录只对当前登录的用户有效。将其放入etc将适用于所有用户。以下是登录的5个环境变量配置文件。/etc/profile/etc/profile.d/*.sh~/.bash_profile~/.bashrc/etc/bashrc3.2功能
