1. Shell中的变量类型windows
Shell中的变量能够分为环境变量、位置变量、预约义的特殊变量以及用户自定义变量、数组
<!--[if !supportLists]-->2. <!--[endif]-->环境变量bash
Shell中的环境变量是一类Shell预约义变量,是用于设置系统运行环境的变量,环境变量由系通通一命名。部分系统变量的值由系统设定,部分环境变量的值能够由用户给定。ide
环境变量的名称由大写字母组成,经常使用的Shell环境变量以下所示:this
HOME: 用户主目录的全路径名,cd $HOME 便可切换到用户的主目录idea
PATH: 相似于windows下的路径,Shell会在里面依次寻找二进制的可执行文件。spa
echo $PATH能够显示当前的PATH,添加新的PATH方法 $PATH=$PATH:新PATH命令行
TERM: 终端类型 echo $TERMorm
PS1: 提示符,root用户默认为#,普通用户默认为$进程
SHELL: Shell解释器的绝对路径
LOGNAME: 登陆用户的用户名
UID: 当前用户的UID echo $UID
<!--[if !supportLists]-->3. <!--[endif]-->位置变量
位置变量是根据出如今命令行上的参数的位置肯定的变量,在调用Shell程序的命令行中,参数的位置定义以下所示。
$命令 参数1 参数2 参数3
其中 $0 对应 执行的命令名
$1 对应 参数1
$2 对应 参数2
$3 对应 参数3
(必定要搞清楚顺序!!)
<!--[if !supportLists]-->4. <!--[endif]-->预约义的特殊变量
预约义的特殊变量有着特殊的含义,用户不能够更改,全部的预约义变量都由“$”符号和另一个符号组成,经常使用的预约义特殊变量以下所示
$#: 位置参数个数(不包括Shell脚本名)
$*: 位置参数组成的字符串
$!: 上一个后台命令对应的进程号
$?: 上一个命令的退出状态,为十进制数字,若是返回为0,则表明执行成功。
$$: 当前的进程号PID
<!--[if !supportLists]-->5. <!--[endif]-->用户自定义变量 (大小写敏感)
要求: 变量名由字母或者下划线开头,后面跟任意数量的字母、数字、下划线。
合法的:
_name SIZE my_idea
非法的:
2god !name hello&world
<!--[if !supportLists]-->6. <!--[endif]-->变量的建立
有两个内置的命令declare 和 typeset 可用于建立变量。经过命令的选项设置还能够设定变量的建立方。
除了使用内置命令来建立和设置变量外,还能够直接赋值,格式为:
变量名=变量值
注意:变量名前面不该加美圆“$”符号。(和PHP不一样)
等号“=”先后不能够有空格。
和C语言不一样,Shell中不须要显式的语法来声明变量。
变量名不能够直接和其余字符相连,若是想相连,必须用括号:echo “this is $(he)llo!”
<!--[if !supportLists]-->7. <!--[endif]-->变量的删除
系统提供unset命令能够删除变量,例如
unset name
<!--[if !supportLists]-->8. <!--[endif]-->变量的赋值
变量的赋值有五种:使用read命令,直接赋值,使用命令行参数,使用命令行的输出结果,从文件读取。
先说一下从read命令吧:(主要是在须要交互时使用)
Read命令是系统内置命令,语法格式为:
read 变量1 变量2
当Shell脚本执行到read命令时,将暂停脚本的执行并等待键盘的输入,当用户输入完毕而且敲下回车以后,将完成赋值操做,脚本继续执行。
Read指令的规则:
<!--[if !supportLists]-->l <!--[endif]-->多个数据或变量之间用空格隔开
<!--[if !supportLists]-->l <!--[endif]-->若变量个数与数据个数相等时,对应取值
<!--[if !supportLists]-->l <!--[endif]-->若变量个数大于数据个数时,没有输入数据的变量取空值
<!--[if !supportLists]-->l <!--[endif]-->若变量个数小于数据个数时,将多余的数据赋给最后一个变量(也就是把空格当成字符串处理)
例子:
#!/bin/bash
echo –n “ please enter your name” //-n 表示用户输入和提示信息在同一行
read name
echo “your name is $name”
#!/bin/bash
echo “Please enter your first name and last name :”
read first last
echo “your first name is $first”
echo “your last name is $last”
第二种赋值方法就是直接给变量赋值(这种赋值方法主要是在不须要交互时,而且参数不须要修改时使用)
例如:name=xiaosu
gender=man
第三种赋值方法是使用命令行参数赋值。(这种赋值方法是参数须要常常变化,而且不须要交互时使用)
这种赋值方法,也就是直接在命令后面跟参数,而后系统用$1来引用第一个参数。
第四种方法是利用命令的输出结果赋值(这种赋值方法能够直接处理上个命令产生的数据)
在Shell程序中,能够将一个命令的输出结果来当作变量,不过须要在赋值语句中使用反引号
例如currentdir=`pwd`
echo $currentdir
最后一种赋值方法是从文件中读入数据
这种方式就适合处理大批量的数据,直接把相应的数据写入文件,而后运行脚本便可。
一般是经过while循环一行行读入数据,即没循环一次,就从文件中读取一行数据,直到读取到文件的结尾。
例如:
#!/bin/bash
ls *.sh >execfile
while read LINE
do
chmod a+x $LINE
done<execfile
这个脚本使用了while..do..done 结构,最后一行表示从文件execfile读取数据。while read LINE表示 每次循环读入一行数据并赋值给变量LINE。
<!--[if !supportLists]-->9. <!--[endif]-->变量的输出
最简单的方法就是使用echo
若是想输出格式化的字符串,就须要使用printf,用法和C语言相似
printf 命令的格式说明符
\” 输出双引号
\\ 输出反斜杠
\a 响铃
\n 换行
\r 回车