1、查看所有的shell变量
set
2、查看所有的只读shell变量
readonly
3、变量设置值
格式:var_name=var_value
注意:=连接变量名和变量值,=两侧不能有空格;当值var_value含空格时,需要双引号把var_value包起来
4、输出变量值
echo $var_name
echo ${var_name}
5、变量值连接
echo $var_name1$var_name2
注意,两个变量之间没有空格
6、查看所有环境变量
env
7、给环境变量设置值
VAR_NAME=VALUE
export VAR_NAME
8、清除变量
unset var_name
9、导出变量到子脚本中
父脚本中定义好变量,然后 export var_name
子脚本中可以使用该变量. $var_name或${var_name}
10、显示脚本执行状态
11、脚本运行的当前进程id执行完脚步,输入 echo $?
注意:0,表示成功
12、传递给shell脚本的参数个数$$
$#
13、反引号`
设置系统的命令输出到变量
echo "shell file name is :`basename $0` "
14、以串行形式,打印当前整个目录
echo *
15、替换运算符,
1) ${var_name:-def_Val}
如果变量var_name存在且为非null,返回该变量的值,否则返回默认值def-Val
注意var_name与:之间没有空格,:与-之间可以有空格。主要用途,如果变量未定义,则用默认值.
2) ${var_name:=val}
如果变量var_name存在且为非null,返回该变量的值,否则,把val的值赋给变量var_name,并返回var_name的值val
注意var_name与:之间没有空格,:与=之间也不能有空格。
3)${var_name:?message},
如果变量var_name存在且为非null,返回该变量的值,否则返回该变量的名字var_name:提示信息meesage,并退出当前命令或脚本
注意var_name与:之间没有空格,:与?之间也不能有空格。
4) ${var_name:+val}
如果变量var_name存在且为非null,返回val,否则返回null
注意var_name与:之间没有空格,:与+之间也不能有空格。
15、返回变量长度
${#val_name}
16、显示所有命令行参数
$* 或 $@
$* 和 $@ 的细微差别
从下面的例子中可以看出,如果是用冒号引起来,表示这个变量不用IFS替换!!所以可以看到这个变量的"原始值"。反之,如果不加引号,输出时会根据IFS的值来分割后合并输出! $* 是按照IFS中的第一个值来确定的!下面这两个例子还有细微的差别!
上例 set 变量其实是3个参数,而下面这个例子实质是2个参数,即 set "x y z" 和 set x y z 是完全不同的。
小结:$* 会根据 IFS 的不同来组合值,而 $@ 则会将值用" "来组合值!
17、算术运算操作 $(())
$((var1 opr var2))
只能是+-*/ 和()运算符,并且只能做整数运算
例如: $((5+1))
18、命令代换$()
类似于 反引号`
例如:echo $(date)
给变量赋值
1. Shell中的变量类型
Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、
环境变量
Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名。部分系统变量的值由系统设定,部分环境变量的值可以由用户给定。
环境变量的名称由大写字母组成,常用的Shell环境变量如下所示:
HOME: 用户主目录的全路径名,cd $HOME 即可切换到用户的主目录
PATH: 类似于windows下的路径,Shell会在里面依次寻找二进制的可执行文件。
echo $PATH可以显示当前的PATH,添加新的PATH方法 $PATH=$PATH:新PATH
TERM: 终端类型 echo $TERM
PS1: 提示符,root用户默认为#,普通用户默认为$
SHELL: Shell解释器的绝对路径
LOGNAME: 登录用户的用户名
UID: 当前用户的UID echo $UID
位置变量
位置变量是根据出现在命令行上的参数的位置确定的变量,在调用Shell程序的命令行中,参数的位置定义如下所示。
$命令 参数1 参数2 参数3
其中 $0 对应 执行的命令名
$1 对应 参数1
$2 对应 参数2
$3 对应 参数3
(一定要搞清楚顺序!!)
预定义的特殊变量
预定义的特殊变量有着特殊的含义,用户不可以更改,所有的预定义变量都由“$”符号和另外一个符号组成,常用的预定义特殊变量如下所示
$#: 位置参数个数(不包括Shell脚本名)
$*: 位置参数组成的字符串
$!: 上一个后台命令对应的进程号
$?: 上一个命令的退出状态,为十进制数字,如果返回为0,则代表执行成功。
$$: 当前的进程号PID
用户自定义变量 (大小写敏感)
要求: 变量名由字母或者下划线开头,后面跟任意数量的字母、数字、下划线。
合法的:
_name SIZE my_idea
非法的:
2god !name hello&world
变量的创建
有两个内置的命令declare 和 typeset 可用于创建变量。通过命令的选项设置还可以设定变量的创建方。
除了使用内置命令来创建和设置变量外,还可以直接赋值,格式为:
变量名=变量值
value1=$1
注意:变量名前面不应加美元“$”符号。(和PHP不同)
等号“=”前后不可以有空格。
和C语言不同,Shell中不需要显式的语法来声明变量。
变量名不可以直接和其他字符相连,如果想相连,必须用括号:echo “this is $(he)llo!”
变量的删除
系统提供unset命令可以删除变量,例如
unset name
变量的赋值
变量的赋值有五种:使用read命令,直接赋值,使用命令行参数,使用命令行的输出结果,从文件读取。
先说一下从read命令吧:(主要是在需要交互时使用)
Read命令是系统内置命令,语法格式为:
read 变量1 变量2
当Shell脚本执行到read命令时,将暂停脚本的执行并等待键盘的输入,当用户输入完毕并且敲下回车之后,将完成赋值操作,脚本继续执行。
Read指令的规则:
多个数据或变量之间用空格隔开
若变量个数与数据个数相等时,对应取值
若变量个数大于数据个数时,没有输入数据的变量取空值
若变量个数小于数据个数时,将多余的数据赋给最后一个变量(也就是把空格当成字符串处理)
例子:
#!/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
第三种赋值方法是使用命令行参数赋值。(这种赋值方法是参数需要经常变化,并且不需要交互时使用)
value1=$1
这种赋值方法,也就是直接在命令后面跟参数,然后系统用$1来引用第一个参数。
第四种方法是利用命令的输出结果赋值(这种赋值方法可以直接处理上个命令产生的数据)
在Shell程序中,可以将一个命令的输出结果来当做变量,不过需要在赋值语句中使用反引号
例如currentdir=`pwd`
echo $currentdir
最后一种赋值方法是从文件中读入数据
这种方式就适合处理大批量的数据,直接把相应的数据写入文件,然后运行脚本即可。
通常是通过while循环一行行读入数据,即没循环一次,就从文件中读取一行数据,直到读取到文件的结尾。
例如:
#!/bin/bash
ls *.sh >execfile
while read LINE
do
chmod a+x $LINE
done 这个脚本使用了while..do..done 结构,最后一行表示从文件execfile读取数据。while read LINE表示 每次循环读入一行数据并赋值给变量LINE。 变量的输出 最简单的方法就是使用echo 如果想输出格式化的字符串,就需要使用printf,用法和C语言类似 printf 命令的格式说明符 \” 输出双引号 \\ 输出反斜杠 \a 响铃 \n 换行 \r 回车