Shell编程 变量
变量的3种类型
1.本地变量 2.环境变量 3.特殊变量
set命令可以查看所用的本地变量和环境变量
本地变量
本地变量——用户自定义的变量
特点是在当前shell环境,当前进程内有效的变量
定义本地变量,在Bash shell环境下,定义本地变量的格式如下
变量名=变量值(若等号两边有空格,则必须使用引号括起来,单双引号,都可)
注意:=两边不能直接接空格
可以同时多个变量赋值 用空格分开 赋值顺序从左到右
只读变量,赋值后变不再改变它的值
读取来自键盘输入的变量
read [-pt] 变量名
-p 后面给出提示信息 -t 后面给出等待的秒数
echo $变量名或者 echo ${变量名}显示本地变量
unset释放本地变量
环境变量
其也被称为系统变量,可以用于所有用户进程
常见环境变量 1.PATH:指定命令的搜索路径 2.HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) 3.HISTSIZE:指保存历史命令记录的条数。 4.LOGNAME:指当前用户的登录名。 5.HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。 6.SHELL:指当前用户用的是哪种Shell。 7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 8.MAIL:指当前用户的邮件存放目录。 9.PS1:命令基本提示符,对于root用户是#,对于普通用户是$。 10.PS2:附属提示符,默认是“>”。
临时更改PATH,只对本次登陆有效
PATH=$PATH:<路径名1>:<路径名2>......
#可执行文件在/home/play文件夹下,但是并没有在PATH变量中,直接play无法访问,但是当我们添加/home/play至PATH变量后就可以访问
root@wang-Lenovo-ideapad-100S-14IBR:/home# play
Command 'play' not found, but can be installed with:
apt install sox
root@wang-Lenovo-ideapad-100S-14IBR:/home# PATH=$PATH:/home/play
root@wang-Lenovo-ideapad-100S-14IBR:/home# play
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.5.2, https://www.playframework.com
~
~ Usage: play cmd [app_path] [--options]
~
~ with, new Create a new application
~ run Run the application in the current shell
~ help Show play help
永久有效需要更改.bashrc
export 可以将本地变量设置为环境变量
特殊变量
某些变量在一开始执行脚本时就被设定且不再改变,就是特殊变量
几个常见的特殊变量
$# 存储Shell程序中命令行参数的个数
$? 存储shell中上一个程序执行的返回值(0表示命令执行成功,非0表示有问题)
$[1-n] 存储第[1-n]个命令行参数
$0 存储shell程序自己的名称
$* 存储shell脚本的所有参数(不包含$0)
$$ 存储shell脚本的进程号(pid)
使用示例:
root@wang-Lenovo-ideapad-100S-14IBR:/home# cat aa.sh -n 1 #!/bin/bash 2 echo $# 3 echo $? 4 echo $1 $2 $3 5 echo $0 6 echo $* 7 echo $$ 8 root@wang-Lenovo-ideapad-100S-14IBR:/home# ./aa.sh 100 200 300 400 500 600 6 0 100 200 300 ./aa.sh 100 200 300 400 500 600 2825
使用应用 输出传入参数年份全部月份的日历
#!/bin/bash cal 1 $1 cal 2 $1 cal 3 $1 cal 4 $1 cal 5 $1 cal 6 $1 cal 7 $1 cal 8 $1 cal 9 $1 cal 10 $1 cal 11 $1 cal 12 $1
shift命令
运行shift命令后会把每个命令行参数向左移动一个位置,即$2、$3、...以此变为$1、$2...原先的$1将被舍弃