一、变量命名                                                            

1、只能包含字母、数字和下划线,并且不能以数字开头,
    2、不应该跟系统中已有的环境变量重名
    3、命名要有含义

二、变量赋值                                                           

变量名称=值var_name=value 等号两边不能有空格

[root@hao ~]# NAME=jerry
[root@hao ~]# echo $NAME
jerry

三、bash:变量类型                                                  

1、环境变量

  脚本在执行时会启动一个子shell进程。命令行中启动的脚本会继承当前shell环境变量,也就是说环境变量的作用域为当前shell进程及其子shell进程。系统自动执行的脚本(非命令行启动)则需要自我定义各环境变量。可以使用export设置环境变量。

export VARNAME=VALUE 或者 VARNAME=VALUE export VARNAME
[root@hao ~]# NAME=jerry
[root@hao ~]# export NAME
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# pstree
init-+-NetworkManager-+-dhclient
    ...
     |-sshd---sshd---sshd---bash---su---bash---bash---bash---pstree
     |-udevd---2*[udevd]
     `-wpa_supplican

2、本地变量(局部变量)

变量一定是进程的变量,因此在一个shell中声明的变量在其他的shell中不可用,并且在其子shell中也不可以得到。引用变量要加${varname},也可以不加{}。

[root@hao ~]# NAME=jerry
[root@hao ~]# echo $NAME
jerry
[root@hao ~]# bash
[root@hao ~]# echo $NAME [root@hao ~]# exit
exit
[root@hao ~]# echo $NAME
jerry

本地变量:VARNAME=VALUE,作用域:整个bash进程。

局部变量 :local VARNAME=VALUE,作用域:当前代码段。

3、位置变量

  $n

例:写一个脚本,能接受一个参数(文件路径),判定此参数是否是一个存在的文件,如果是就显示“ok”

[root@hao ~]# nano filetest.sh
[root@hao ~]#
cat filetest.sh
#! /bin/bash
#
if [ -e $ ];then
echo "ok"
else
echo "no such file"
fi
[root@hao ~]#
chmod +x filetest.sh
[root@hao ~]#
./filetest.sh /etc/fstab
ok
[root@hao ~]# ./filetest.sh /etc/fstabs
no such file

  shift,每次shift都会剔除一个参数 shift n表示剔除n 个

[root@hao ~]# nano filetest1.sh
[root@hao ~]#
cat filetest1.sh
#!/bin/bash
echo $
shift
echo $
shift
echo $
[root@hao
~]# chmod +x filetest1.sh
[root@hao ~]#
./filetest1.sh   

4、特殊变量(系统变量)

用来保存某些特殊数据:

  $?:保存上一个命令的执行状态返回值(0-255)。0为正确,其他为错误。其中1,2,127系统预留,其他的可以自定义。

[root@hao ~]# ls /var
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
[root@hao ~]# echo $?

[root@hao ~]#
ls /varr
ls: cannot access /varr: No such file or directory
[root@hao ~]# echo $?

如果只想看返回的状态值而不想看输出结果,则只需将输出重定向至数据黑洞/dev/null

[root@hao ~]# ls /varr &> /dev/null
[root@hao ~]#
echo $?

  $#:参数的个数

  $*:参数列表

  $@:参数列表(与上面的有不同)

例:写一个脚本,能接受一个参数(文件路径),判定此参数是否是一个存在的文件,如果是就显示“ok”

[root@hao ~]# nano filetest.sh
[root@hao
~]# cat filetest.sh
#! /bin/bash
#
echo $#
echo $*
echo $@
if [ $# -lt ];then
echo "Usage:./filetest.sh ARG1 ARG2 ..."
exit
fi
if [ -e $ ];then
echo "ok"
else
echo "no such file"
fi
[root@hao ~]#
chmod +x filetest.sh
[root@hao ~]#
./filetest.sh Usage:./filetest.sh ARG1 ARG2 ...
[root@hao ~]# ./filetest.sh  /etc/fstab /etc/fstabs
2
/etc/fstab /etc/fstabs
/etc/fstab /etc/fstabs
ok

四、撤销变量                                                              

[root@hao ~]# unset NAME
[root@hao ~]# echo $NAME

五、查看当前shell变量                                               查看当前shell所有变量,包含环境变量和本地变量

[root@hao ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
...

查看当前shell环境变量 printenv env 或者export

[root@hao ~]# printenv
HOSTNAME=hao
SHELL=/bin/bash
TERM=xterm
...

六、追加shell变量                                                      

[root@hao ~]# ANIMAL=pig
[root@hao ~]# ANIMAL=$ANIMAL:goat
[root@hao ~]# echo $ANIMAL
pig:goat
[root@hao ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@hao ~]# export PATH=$PATH:/usr/local/apache/bin
[root@hao ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin
[root@hao ~]# export PATH=/usr/local/mysql/bin:$PATH
[root@hao ~]# echo $PATH
/usr/local/mysql/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin

七、第一个脚本程序                                                     

首先创建脚本程序first.sh,脚本程序的第一行要指定程序的魔数,#!加上解释器的路径。然后赋予其执行权限,之后执行,执行时候要加上路径,因为在没有给路径时,默认去path中去找该命令是否存在。

[root@hao ~]# cat first.sh
#!/bin/bash
ls /var
cat /etc/inittab
[root@hao ~]# chmod +x first.sh
[root@hao ~]#
./first.sh
account crash db games lib lock mail opt run tmp yp
cache cvs empty gdm local log nis preserve spool www
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(), init(), and initctl().
#
# Default runlevel. The runlevels used are:
# - halt (Do NOT set initdefault to this)
# - Single user mode
# - Multiuser, without NFS (The same as , if you do not have networking)
# - Full multiuser mode
# - unused
# - X11
# - reboot (Do NOT set initdefault to this)
#
id::initdefault:

《鸟哥的Linux私房菜》学习笔记(8)——bash脚本编程之变量的更多相关文章

  1. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  2. 鸟哥的Linux私房菜学习笔记——文件权限与目录配置

    Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...

  3. 鸟哥的Linux私房菜学习笔记(1)

    2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...

  4. 鸟哥的linux私房菜学习记录之bash

    当你对计算机输入一个指令时,bash会将指令传送给核心kernel,核心再去调用相关的程序,启动硬件. 如果直接让用户操作操作系统,可能会造成系统的崩溃,所以操作系统通过应用程序来让用户操作系统即壳程 ...

  5. 【鸟哥的Linux私房菜】笔记1

    Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...

  6. 鸟哥的linux私房菜学习-(一)优缺点分析以及主机规划与磁盘分区

    一.linux的优缺点 那干嘛要使用Linux做为我们的主机系统呢?这是因为Linux有底下这些优点: 稳定的系统:Linux本来就是基于Unix概念而发展出来的操作系统,因此,Linux具有与Uni ...

  7. 【鸟哥的Linux私房菜】笔记2

    Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...

  8. 【鸟哥的Linux私房菜】笔记3

    正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...

  9. 《鸟哥的Linux私房菜》笔记——02. 关于Linux

    Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...

  10. 《鸟哥的Linux私房菜》笔记——03. 磁盘分区

    Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...

随机推荐

  1. 实现多行文字居中方法(兼容IE6)

    <p class="mulit_line"> <span style="font-size:12px;">这里是高度为150像素的标签内 ...

  2. vs2013安装时提示核心功能错误

    VS核心功能安装时发生严重错误:解决办法:计算机管理->设备管理器->非即插即用驱动程序->http改为自动.

  3. JVM(二):垃圾回收

    三个问题: 那些内存需要回收? -- 对象是否存活判断 什么时候回收?   --垃圾回收触发条件 如何回收? --垃圾回收算法 垃圾回收应用  -- 理解GC日志.使用垃圾回收命令和工具 1.  判断 ...

  4. <Android 应用 之路> 天气预报(五)

    前言 写了上一篇文章,讲了下这个实现天气预报的使用内容,现在又到了看代码的时候,主要还是贴代码,然后添加足够的注释. 聚合数据SDK配置 将juhe_sdk_v_X_X.jar以及armeabi文件夹 ...

  5. Android 从零开始搭建一个主流项目框架—RxJava2.0+Retrofit2.0+OkHttp

    我这里的网络请求是用的装饰者模式去写的,什么是装饰者模式呢?在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.我的理解就是一个接口, ...

  6. C#使用Aspose.Words操作word文档

    最近接到个需求,由于客服这边要导出大量有一定规则的word文件,里面的内容希望系统自动填充,例如 这里我使用Aspose.Words.dll这个类库, 1.首先,我们需要创建模板文件,毕竟有规则的东西 ...

  7. C# linq根据自定义筛选条件和所对应的数值进行筛选

    在软件应用中有时候会出现这样的界面:上面是利用多选框和下拉框组合的筛选条件.下面表格展示筛选后的数据.如下图 上面是筛选条件,表格是根据筛选条件筛选的结果. 如果表格不支持筛选功能.可以利用Linq对 ...

  8. HDU5200 数据离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5200 ,数据离线处理. 这是BestCoder Round #36的C题,比赛时自己用线段树做,姿势不 ...

  9. NYOJ-198-数数

    原题地址 数数 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 我们平时数数都是喜欢从左向右数的,但是我们的小白同学最近听说德国人数数和我们有些不同,他们正好和我们相 ...

  10. Windows Profile的一些问题

    电脑症状:桌面复制的文件重启后消失:新安装的软件重启后也自动消失.排查:使用autoruns观察,发现安装了麦咖啡和360两套“安全”软件,除此外并无异常,任务管理器內也无异常发现.过程:1.保险起见 ...