在shell中有3种变量:系统变量,环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要
设置,用户变量在编程过程中使用量最多。
1。系统变量
常用的系统变量
变量名
含义
$# |
命令行参数的个数
|
$n |
$1表示第一个参数,$2表示第二个参数,以此类推
|
$0 |
当前程序的名称
|
$? |
前一个命令或许或函数的返回码
|
$* |
以“参数1 参数2 。。。”形式保存所有参数
|
$@ |
以“参数1”“参数2”。。。形式保存所有参数
|
$$ |
本程序的(进程ID号)PID |
$! |
上一个命令的PID |
|
|
例如下面是sysvar.sh的脚本内容。
#!/bin/sh
#This script explains how the system variable works
echo "The name of the program is $0"
echo " You''ve input $# parameters.They are $*"
echo " And the first one of them is $1"
echo " The PID of this program is $$"
echo "... "
echo " You've executed correctly,and the return code is $?"
其输出如下:
The name of the program is sysvar.sh【$0表示当前程序名】
You''ve input 2 parameters.They arehello world【$*表示所有的参数】
And the first one of them ishello【$1表示第一个参数】
The PID of this program is1504【$$本程序的PID】
...
You've executed correctly,and the return code is0【$?表示返回码,如果为零则表示真】
2。环境变量
当shell程序启动时,都自动设置一组变量,这组变量就是环境变量。shell中的所有命令都可以使用这些参数,例如之前博客中提到的LOGNAME变量。环境变量可以在~/.bash_profile或者~/.bashrc中设置,
下面列举了常见的环境变量:
常见的环境变量
变量名
含义
PATH
|
命令搜索路径,以冒号为分隔符。注意与DOS下不同的是当前目录不在系统路径里 |
HOME |
用户home目录的路径名,是cd命令的默认参数 |
COLUMNS |
定义了命令编辑模式下可使用命令行的长度 |
EDITOR |
默认的行编辑器 |
VISUAL |
默认的可视编辑器 |
FCEDIT |
命令fc使用的编辑器 |
HISTFILE |
命令历史文件 |
HISTSIZE |
命令历史文件中最多可包含的命令条数(默认1000条) |
HISTFILESIZE |
命令历史文件中包含的最大行数 |
IFS |
定义shell使用的分隔符 |
LOGNAME |
用户登录名 |
MAIL |
指向一个需要shell监视其修改时间的文件。当该文件修改后,shell将发消息You have mail给用户 |
MAILCHECK |
shell检查MAIL文件的周期,单位是秒 |
MAILPATH |
功能与MAIL类似,但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息 |
SHELL |
shell的路径名 |
TERM |
终端类型 |
TMOUT |
shell自动退出的时间,单位为秒,若设为0则禁止shell自动退出 |
PROMPT_COMMAND |
指定在主命令提示符前应执行的命令 |
PS1 |
主命令提示符 |
PS2 |
二级命令提示符,命令执行过程中要求输入数据时用 |
PS3 |
selcet的命令提示符 |
PS4 |
调试命令提示符 |
MANPATH |
寻找手册页的路径,以冒号分隔 |
LD_LIBRARY_PATH |
寻找库的路径,以冒号分隔 |
|
|
当然也可以定义新的环境变量,使用export命令即可。
#export NEW_ENV_VAR="This is a new environment variable"
#echo "$NEW_ENV_VAR"
This is a new environment variable
ps:
RANDOM
这个玩意儿就是『随机随机数』的变量啦!目前大多数的 distributions 都会有随机数生成器,那就是 /dev/random这个文件。 我们可以透过这个随机数文件相关的变量 ($RANDOM)
来随机取得随机数值喔。在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间,所以,你只要 echo $RANDOM 时,系统就会主动的随机取出一个介于 0~32767 的数值。万一我想要使用
0~9 之间的数值呢?呵呵~利用 declare 宣告数值类型, 然后这样做就可以了:
[root@SOR_SYS ~]# echo $RANDOM
14522
[root@SOR_SYS ~]# declare -i number=$RANDOM*10/32768 ; echo $number
6
假如说想修改HISTSIZE的默认记录命令个数,就可以在命令行下执行
[root@SOR_SYS ~]# sed -i 's/HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
[root@SOR_SYS ~]# source /etc/profile
或者直接在文件中修改就ok!
3.用户变量
用户变量最长用到的变量,使用也十分简单。用户定义的变量名必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字。
//以下都是不合法的变量
abc#123//变量名中不能包含除字母数字及下划线以外的字符
123aBc
//第一个字符不能为数字
4。变量的赋值和使用
shell 下的变量和C中的变量不同,无需声明即可使用,赋值同时即声明了变量。对于用户变量,用户可按如下方法赋值。
variable_name=value
eg:season=Winter
【赋值时,变量和等号之间不要有空格,等号和值之间也不要有空格,否则shell不会认为变量被定义。】
同时,shell也允许在变量间进行相互赋值。引用变量时,需要在变量名前面加$符号。
eg:current_season=$season
使用变量时,需要在变量名钱加$符号,例如echo $season。当然使用时也会遇到一些比较特殊的情况,就是变量名包含在其他字符串中,这时就需要用{}将变量名括起来。
#a=good
#echo “${a}morning”【为了避免变量名上造成混淆,建议总是使用{}将变量名括起来】
输出结果为:goodmorning
若要重置某一变量,即可使用unset命令清空某一变量的赋值
eg:
#a=good
#echo “{a}morning”
goodmorning
#unset a
#echo “{a}morning”
morning
另外,如果在赋值后不希望改变变量,使其类似于常数,则可以使用readonly命令将其设为只读。
//先赋值,再设置只读
#a=good
#readonly a
//或者直接在赋值时设置只读
#readonly good
此时若用unset命令重置变量a或者对a重新赋值,则会产生错误。
#unset a
-bash: a: readonly variable
#a=Good
-bash: a: readonly variable
另外,shell的变量默认是全局作用的,如果需要在一定范围内生效,则需要加上local限制。例如local a将设置a为局部变量。
当然也可以对数组进行赋值,对于已有的数组,也可以对其中一个元素赋值,方法如下:
//直接从index为0顺序赋值
ARRAY=(value1 value2 。。。valueN)
//同时指定index和value
ARRAY=(index1=value1 index2=value2 。。。indexN=valueN)
//为单一元素赋值
ARRAY[INDEX]=value 【数组的index从0开始】
使用数组的方法为${ARRAY[index]},示例如下:
#!/bin/bash
#定义arr数组
arr=(a b c)
#对其中一个元素赋值
arr[3]=d
echo ${arr[0]}
echo ${arr[3]}
5。数字和数组的声明
默认的赋值是对字符串赋值,例如执行如下脚本,就会发现这个脚本并没有使用5和6相加输出“11”,而是输出“5+6”。
#!/bin/bash
a=5
b=6
c=$a+$b
echo $c
如果要对数字或数组进行声明,则要declare命令,例如上例改成如下形式,即可正常进行加减。
#!/bin/bash
declare -i a=5
declare -i b=6
declare -i c=$a+$b
echo $c
declare支持的声明类型如下。使用“- 类型”开启,“+ 类型”关闭。
(1)i:定义整数integer
(2)a:定义数组array
(3)f:定义函数function
(4)r:定义为只读readonly
(5)x:定义为通过环境输出变量
例如对声明数组变量的方法如下。
#!/bin/bash
declare -a arr=(a b c )
另外:
echo $(( 13 % 3 ))
至於数值运算上的处理,则有:『+, -, *, /, % 』等等。 那个 % 是取余数啦
6.运算类(其中包括字符和数值)
分享到:
相关推荐
Shell变量名使用的特殊字符: $# 传送给命令Shell的参数序号 $- 在Shell启动或使用set命令时提供选项 $? 上一条命令执行后返回的值 $$ 当前shell的进程号 $! 上一个子进程的进程号 $@ 所有的参数,每个都用双...
shell命令行
linux超级基础系列——shell变量(本地变量和环境变量 linux超级基础系列——shell变量(本地变量和环境变量
工作笔记 shell 变量和运算符 工作笔记 shell 变量和运算符 工作笔记 shell 变量和运算符 工作笔记 shell 变量和运算符
一、实验目的 (1)熟悉shell变量 (2)掌握shell变量的用法 (3)掌握shell通配符的用法 (4)掌握编写shell脚本程序使用和输出环境变量
练习shell变量、重定向、管道等相关命令
linux运维学习笔记:Shell变量
linux超级基础系列——shell变量(本地变量和环境变量).pdf
•深入浅出Shell编程: Shell 变量 ◦1 系统变量 ◦2 Shell用户变量 ■2.1 基础 ■2.2 使用技巧 ■2.3 shell 中的数组 ◦3 shell 环境变量 先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,...
很简单的Shell变量 ^_^ 适合新手.
shell变量与常用符号2shell变量与常用符号2
shell变量与常用符号1shell变量与常用符号1
shell变量及控制结构1
linux运维学习笔记:Shell变量的数值运算
linux超级基础系列——shell变量(本地变量和环境变量)[参考].pdf
主要内容: .shell基础 基本介绍,环境,选项,特殊字符 .shell变量 用户定义变量,环境变量,位置变量(shell 参数) .shell script编程 条件测试,循环及重复控制
5.1: Shell概述 、 编写及执行脚本 、 Shell变量 、 数值运算 、 总结和答疑.docx
LINUX操作系统基础shell变量的应用二PPT教案学习.pptx
Linux运维-云计算 基础全栈-083 应用管理-2.1 shell变量01.mp4
Linux运维-云计算 基础全栈-085 应用管理-2.3 shell变量03.mp4