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,将会显示一个带有菜单选项的界面。