首页 > 代码库 > bash脚本(一)_变量和变量类型

bash脚本(一)_变量和变量类型

变量类型:实现确定数据的存储格式和长度。

字符

数值

整形:

浮点型:

布尔型:

真(ture)

假(false)


逻辑运算:

与:&

或:|

非:!


短路逻辑运算:

与:只要一个为假,结果一定为假

或:只要一个威震,结果一定为真。

非:


引用:

强引用:

在变量使用前,一定要事先声明,甚至还需要初始化。变量在初始化前内容为一段随机数。

数值初始化为0。 字符串初始化为NULL。


弱引用:变量用时声明,不需要区分类型。


变量赋值:

bash变量类别:


1.本地变量:

作用域为整个bash进程。仅对当前shell进程有效,对子shell无效。

#[set] [OPTION] VARNAME = VALUE

默认不带参数则显示当前shell中的变量。 

例如:

#NAME=jerry 定义1个变量NANE,赋值jerry

#echo $NAME 输出变量NAME的值。

jerry

#bash 新建zishell

#echo $NAME 输出变量的值,无输出。

局部变量:

local VARNAME=VALUE 作用域为当前代码段。



2.环境变量

是本地变量的一种,作用域为是当前shell进程及其子进程。


脚本在执行时会在当前shell进程中启动一个子进程:

命令行中启动的脚本汇集成当前shell的环境变量。

系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量。


#export [OPTION] VARNAME 把本地变量声明成环境变量。


#export VARNAME=VALUE


#declare -x VARNAME=VALUE


#export VARNAME1:$VARNAME2 将VARNAME1附加到VARNAME2里边。


例如:

#export PATH=/usr/local/apache/bin:$PATH

将/usr/local/apache/bin 添加到环境变量$PATH。


查看当前shell中的环境变量:

#printenv


#env


#exprot



系统常见环境变量:

$HOSTNAME

$SHELL

$HISTORY

$PWD

$OLDPWD

$USER

$MAIL

$PAHT

$PS1 定义提示符前的内容,默认PS1=‘[\u@\h \W}]\$‘

\u 当前用户名

\H 完整的主机名

\h 完整主机名的第一个点前的内容

\W 显示basename,基名。

\w 显示完整路径

\# 显示命令号

\! 显示在命令历史中的序号

\$ UDI=0显示#,普通用户显示$

$PS2 第二个提示符,默认是>号。上个命令未结束。续行符号。

$PS3

$PS4 执行脚本追踪命令的时候显示+号


3.特殊变量

$? 用于引用前一个命令的执行状态的返回值。


程序的返回值:

1.程序自身执行结果的返回值。

2.程序执行状态的返回值(0-255)。

0 执行成功

1-255 执行失败,其中1、2、127被系统保留。



例如:

#ls /etc

#echo $?

0

#lss /et

#echo $?

127


#id student

#echo $?

0


#id student $> /dev/null

#echo $?

0



4.位置变量

$1,$2... 用来引用脚本的参数。



bash支持的引号

1.‘‘ 单引号

强引用,引号中的内容原封不动输出。

2."" 双引号

弱引用,引号中的变量要进行变量替换。

3.`` 反引号

实现命令替换


变量的声明和赋值

声明:

#declare [OPTION] VARNAME 声明一个变量。

-i 声明为整形

-a 声明为数组

-r 声明为只读变量

-x 声明为环境变量

赋值:

#VAR1=VALUE

#VAR2=$VAR1

#VAR1=${VAR2-VALUE} 

#VAR2=${VAR1}VALUE


例如:

#declare -i AGE

#AGE=23

#A=30

#declare -i AGE=23

#declare NAME="tony max"

#NAME= "$AGE" 

#AGE=${A:-40} 若A有值,则AGE的值为A的值,若没有则赋值给40




变量的引用:

只有在引用的时候才带上$。

${VARNAME} 花括号可以省略。


例如:

#ANIMAL=pig

#echo "there are some $ANIMAL"

there are some pig


#echo "there are some ${ANIMAL}s"

there are some pigs 


#echo "there are some $ANIMALs"

there are some


这里不加花括号,系统会认为变量名为ANIMALs。所以无法显示。


#echo ‘there are sonme ${ANIMAL}s‘

there are sonme ${ANIMAL}s

使用‘‘是强引用,引号中的内容原封不动的输出。


变量的撤销:

#unset [OPTION] VARNAME

例如:

#unset NAME

#echo $NAME



软件设备(bit bucket):

/dev/null 数据黑洞,是软件模拟的设备。


/dev/zero 泡泡机,生成大量的0。


/dev/random 随机数生成器,是基于中断的IRQS产生随机数的。IRQS跟一些特殊的硬件绑定,基于这些硬件的interrupts将会提供给random设备。


/dev/urandom 随机数生成器,不受interrupts的限制。



脚本:

命令的堆砌,按照实际需要结合命令流程控制机制实现的源程序。

任何脚本的第一行都得有shebang(魔数):

#!/bin/bash

#为注释

其余内容都被视为脚本的内容。


脚本的执行:

#./BASHNAME.sh

#bash BASHNAME.sh

将当前路径添加到PATH中。


本文出自 “小私的blog” 博客,请务必保留此出处http://ggvylf.blog.51cto.com/784661/1599920

bash脚本(一)_变量和变量类型