Linux下的shell编程(二)--变量
来源:互联网 发布:内存涨价 知乎 编辑:程序博客网 时间:2024/05/01 09:51
一、Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
Shell支持自定义变量。
1)定义变量
定义变量时,变量名不加美元符号($),如:
variableName="value"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
推荐给所有变量加上花括号,这是个好的编程习惯。shell里变量的默认类型是字符串
2)重新定义变量
已定义的变量,可以被重新定义,如:
myUrl="http://see.xidian.edu.cn/cpp/linux/"
echo ${myUrl}
myUrl="http://see.xidian.edu.cn/cpp/shell/"
echo ${myUrl}
这样写是合法的,但注意,第二次赋值的时候不能写$myUrl="http://see.xidian.edu.cn/cpp/shell/",使用变量的时候才加美元符($)。
3)只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变和unset。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="http://see.xidian.edu.cn/cpp/shell/"
readonly myUrl
myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.
4)删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用;
unset命令不能删除只读变量。
举个例子:
#!/bin/sh
myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
unset myUrl
echo $myUrl
上面的脚本没有任何输出。
5)变量类型
运行shell时,会同时存在三种变量:
1.局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2.环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3.shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
二、Shell特殊变量:Shell$0, $#, $*, $@, $?, $$和命令行参数
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。
例如,$表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表
变量
含义
$0
当前脚本的文件名
$n
传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#
传递给脚本或函数的参数个数。
$*
传递给脚本或函数的所有参数。
$@
传递给脚本或函数的所有参数。被双引号("")包含时,与$*稍有不同,下面将会讲到。
$?
上个命令的退出状态,或函数的返回值。
$$
当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
1)命令行参数
运行脚本时传递给脚本的参数称为命令行参数。命令行参数用$n表示,例如,$1表示第一个参数,$2表示第二个参数,依次类推。
请看下面的脚本:
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
运行结果:
$./test.sh Zara AliFile Name : ./test.shFirst Parameter : ZaraSecond Parameter : AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 2
2)$*和$@的区别
当没有双引号("")包含时,$*和$@都是一个一个参数分开的(有换行的意思)整体。当有双引号("")包含时,"$@"依旧是一个个参数分开,而"$*"则是所有参数作为一个整体
下面的例子可以清楚的看到$*和$@的区别:
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
执行 ./test.sh"a" "b" "c" "d",看到下面的结果:
$*= a b c d"$*"= a b c d$@= a b c d"$@"= a b c dprint each param from $*abcdprint each param from $@abcdprint each param from "$*"a b c dprint each param from "$@"abcd
3)退出状态
$?可以获取上一个命令或者函数的退出状态。所谓退出状态,就是上一个命令或者函数执行后的返回结果。
退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1。
不过,也有一些命令返回其他值,表示不同类型的错误。#跟C语言很相似
下面例子中,命令成功执行:
$./test.sh Zara AliFile Name : ./test.shFirst Parameter : ZaraSecond Parameter : AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 2$echo $?0$
- Linux下的shell编程(二)--变量
- Linux 下的 shell 编程之变量
- linux下shell编程笔记(二)
- linux下shell编程(二)------修订版
- Linux下Shell编程(二)
- shell编程(二)--变量
- Linux shell编程学习笔记(二) 变量
- linux shell下的变量
- linux 下shell脚本编程之变量
- linux shell(二)shell 中的变量
- Linux的shell编程(二)
- Linux的shell编程(二)
- Linux Shell编程(二)--Shell变量及相关操作
- Linux的shell编程(下)
- linux shell编程(二)
- LINUX shell编程(二)
- linux shell 编程(二)
- Linux下的多线程编程(二) 条件变量的使用
- Openjudge 2989 糖果(背包DP)
- 一周IT博文精选TOP10(2016.10.02)
- LeetCode 392. Is Subsequence 解题报告
- HTML学习笔记(六)
- for-each循环优先于传统的for循环
- Linux下的shell编程(二)--变量
- Java多线程示例——模拟银行柜台处理业务
- Excel下拉框联动中的事件
- 3.0EventBus使用
- Linux中的文件操作命令
- STL容器vector的内存问题
- Linux学习笔记七
- <marquee>通知滚动
- hdu 5583 暴力