位置变量 :向脚本中使用位置参数,向系统命令传递参数 $0,$1,...$9
$0表示脚本中的名字,$1表示脚本中的第一个参数,然后依次类推
(脚本的第一行是脚本是用什么shell写的)
(脚本的第二行是脚本的名字,脚本的用途) 写脚本养成好习惯
(脚本的第三行是由谁写的,什么时间写的)
eg:向脚本中使用位置参数
#####vim eg1.sh
#!/bin/bash
#eg1.sh
echo "this is script name: $0"
echo "it is one parameters: $1"
echo "it is two parameters: $2"
echo "it is three parameters: $3"
echo "it is four parameters: $4"
echo "it is five parameters: $5"
####保存退出,chmod +x eg1.sh
####运行./eg1.sh 1 2 3 4
[iyunv@localhost ~]# ./eg1.sh 1 2 3 4
this is script name: ./eg1.sh
it is one parameters: 1
it is two parameters: 2
it is three parameters: 3
it is four parameters: 4
it is five parameters:
特殊变量
$0 正在被执行命令的名字。
$# 表示传递到脚本的参数个数
$* 以一个字符串显示所有向脚本传递的参数,跟位置变量不同的是这里参数可超过9个。
$$ 表示当前运行脚本的进程ID号
$! 表示后台运行的一个进程的ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每一个参数
$- 显示shell使用的当前选项,与set命令相同
$? 显示最后命令运行的推出状态,0表示没有错误,其他任何值表示有错误
eg:
#####vim eg2.sh
#!/bin/bash
#eg2.sh
echo "this is script name: $0"
echo "it is one parameters: $1"
echo "it is two parameters: $2"
echo "it is three parameters: $3"
echo "it is four parameters: $4"
echo "it is five parameters: $5"
echo "this is :$#"
echo "this is :$*"
echo "this is process ID:$$"
echo "this is last:$?"
####保存退出,chmod +x eg2.sh
####运行 ./eg2.sh A B C D F
this is script name: ./eg2.sh
it is one parameters: A
it is two parameters: B
it is three parameters: C
it is four parameters: D
it is five parameters: F
this is :5
this is :A B C D F
this is process ID:7976
this is last:0
影响变量的命令
declare
设置或显示变量
-f 只显示函数名
-r 创建只读变量(declare 和typeset)
-x 创建转出变量
-I 创建整数变量
使用+替代-,可以颠倒选项的含义
export
用于创建传给子shell的变量
--表明选项结束,所有后续参数都是实参。
-f 表明在“名-值”对中的名字是函数名。
-n 把全局变量转换成局部变量。即命令的变量不再传给子shell
-p 显示全局变量列表
readonly
用于显示或只读变量
--表明选项结束
-f 创建只读变量
set
设置或重设各种shell
shift [n]
用于移动位置变量,调整位置变量,使$3 的值赋予$2,$2的值赋予$1
typeset
用于显示或设置变量,是declare的同义词
unset
用于取消变量的定义
-f 删除只读变量 ,但不能取消从shell环境中删除指定的变量 和函数
eg:
#####vim eg2.sh
#!/bin/bash
#eg2.sh
echo "this is script name: $0"
echo "it is one parameters: $1"
echo "it is two parameters: $2"
echo "it is three parameters: $3"
echo "it is four parameters: $4"
echo "it is five parameters: $5"
echo "this is :$#"
echo "this is :$*"
echo "this is process ID:$$"
echo "this is last:$?"
shift
echo "now this is one:$1"
echo "now this is two:$2"
####保存退出,chmod +x eg2.sh
####运行 ./eg2.sh A B C D F
this is script name: ./eg2.sh
it is one parameters: A
it is two parameters: B
it is three parameters: C
it is four parameters: D
it is five parameters: F
this is :5
this is :A B C D F
this is process ID:8094
this is last:0
now this is one:B
now this is two:C
eg:
#####vim eg2.sh
#!/bin/bash
#eg2.sh
echo "this is script name: $0"
echo "it is one parameters: $1"
echo "it is two parameters: $2"
echo "it is three parameters: $3"
echo "it is four parameters: $4"
echo "it is five parameters: $5"
echo "this is :$#"
echo "this is :$*"
echo "this is process ID:$$"
echo "this is last:$?"
shift 2
echo "now this is one:$1"
echo "now this is two:$2"
####保存退出,chmod +x eg2.sh
####运行
./eg2.sh A B C D F
this is script name: ./eg2.sh
it is one parameters: A
it is two parameters: B
it is three parameters: C
it is four parameters: D
it is five parameters: F
this is :5
this is :A B C D F
this is process ID:8103
this is last:0
now this is one:C
now this is two:D
eg:反引号:执行系统的命令,并执行出来
[iyunv@localhost ~]# date
Fri Mar 1 18:48:22 CST 2013
[iyunv@localhost ~]# echo date
date
[iyunv@localhost ~]# echo $date //date是系统的命令,不是系统的变量,所以没有输出
[iyunv@localhost ~]# echo `date`
Fri Mar 1 18:48:39 CST 2013