Shell 编程语言是一种非类型的解释型语言,不像 C++/Java 需要事先声明变量。在 Shell 中,可以使用赋值符号(=)为变量赋值。Shell 变量可以分为两类:局部变量和环境变量。局部变量只在创建它们的 Shell 脚本中使用,而环境变量可以在创建它们的 Shell 及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用 Shell 变量。
例如,在脚本中定义 A=123,表示定义了一个名为 A 的变量,它的值为 123。在脚本中引用变量时,可以使用 $A。将变量放在字符串中会产生相应的效果,例如:
#!/bin/bash
# Author wugk 2014-06-10
A=123
echo "Printf variables equal is $A"
执行脚本 sh test.sh
,结果将会显示:Printf variables equal is 123
。这里简单地理解变量,相当于定义了一个别名-名称,引用时加上 $
符号即可。
例如,定义变量 name=wuguangke
,执行 echo $name
将会显示 wuguangke
。
Shell 常见的系统变量解析如下:
$0
:当前程序的名称。$n
:当前程序的第 n 个参数,n=1,2,…9。$*
:当前程序的所有参数(不包括程序本身)。$#
:当前程序的参数个数(不包括程序本身)。$?
:命令或程序执行完后的状态,一般返回 0 表示执行成功。$UID
:当前用户的 ID。$PWD
:当前所在的目录。
以下是一个测试常用变量的脚本示例 auto_var.sh
:
#!/bin/bash
#auto print variables
#by wugk 2014-09
echo -e '\033[32m-----------------------------\033[0m'
echo "This is $0 param !"
echo "This \$1 is $1 param !"
echo "This \$2 is $2 param !"
echo -e '\033[32m-----------------------------\033[0m'
echo "This \$* is $* param !"
echo "This \$# is $# param !"
echo "This \$? is $? param !"
echo
接下来,让我们编写一个简单的打印菜单的脚本示例:
#!/bin/bash
#auto install httpd
#by wugk 2014-09
echo
#!/bin/bash
#auto install httpd
#by wugk 2014-09
echo -e '\033[32m-----------------------------\033[0m'
FILES=httpd-2.2.17.tar.bz2
URL=http://mirrors.cnnic.cn/apache/httpd/
PREFIX=/usr/local/apache2/
echo -e "\033[36mPlease Select Install Menu:\033[0m"
echo
echo "1) Download official Httpd package."
echo "2) Extract Apache source code."
echo "3) Compile and install Httpd server."
echo "4) Start HTTPD server."
echo -e '\033[32m-----------------------------\033[0m'
sleep 20
以上是一个简单的打印菜单的脚本示例。在脚本中,使用 echo
命令打印菜单选项,使用 \033[32m
和 \033[36m
控制输出颜色,使用 sleep
命令暂停脚本执行一段时间。
在脚本中,可以根据实际需要修改变量的值和菜单选项。执行该脚本 sh menu.sh
,将会显示一个带有菜单选项的界面。