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

一、变量命名                                                            

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

二、变量赋值                                                           

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

[[email protected] ~]# NAME=jerry
[[email protected] ~]# echo $NAME
jerry

三、bash:变量类型                                                  

1、环境变量

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

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

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

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

[[email protected] ~]# NAME=jerry
[[email protected] ~]# echo $NAME
jerry
[[email protected] ~]# bash
[[email protected] ~]# echo $NAME

[[email protected] ~]# exit
exit
[[email protected] ~]# echo $NAME
jerry

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

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

3、位置变量

$n

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

用来保存某些特殊数据:

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

[[email protected] ~]# ls /var
account  crash  db     games  lib    lock  mail  opt       run    tmp  yp
cache    cvs    empty  gdm    local  log   nis   preserve  spool  www
[[email protected] ~]# echo $?
0
[[email protected] ~]# ls /varr
ls: cannot access /varr: No such file or directory
[[email protected] ~]# echo $?
2

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

[[email protected] ~]# ls /varr &> /dev/null
[[email protected] ~]# echo $?
2

四、撤销变量                                                              

[[email protected] ~]# unset NAME
[[email protected] ~]# echo $NAME

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

[[email protected] ~]# 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

[[email protected] ~]# printenv
HOSTNAME=hao
SHELL=/bin/bash
TERM=xterm
...

六、追加shell变量                                                      

[[email protected] ~]# ANIMAL=pig
[[email protected] ~]# ANIMAL=$ANIMAL:goat
[[email protected] ~]# echo $ANIMAL
pig:goat
[[email protected] ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] ~]# export PATH=$PATH:/usr/local/apache/bin
[[email protected] ~]# 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
[[email protected] ~]# export PATH=/usr/local/mysql/bin:$PATH
[[email protected] ~]# 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中去找该命令是否存在。

[[email protected] ~]# cat first.sh
#!/bin/bash
ls /var
cat /etc/inittab
[[email protected] ~]# chmod +x first.sh
[[email protected] ~]# ./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(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
时间: 2024-10-03 20:34:26

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

鸟哥的linux私房菜学习笔记 ---第7章-1

1, /usr UNIX software resource 关于软件的文件都存放在这个目录下2, 开机仅有根目录会被挂载,其他分区则是在开机完成之后才会持续进行挂载的行为3, 根目录下的子目录不一定和根目录在同一个分区下.但是,要注意根目录下与开机过程有关的目录不能与根目录放在不同的分区下.4, linux目录配置标准:FHS(Filesystem hierarchy standard) 仅定义根目录及其子目录       FHS 定义的三层主目录为: /, /var,/usr   有五个目录

鸟哥的linux私房菜学习笔记 ---第6章-1

linux是多任务多用户系统-r 进行递归的持续更改 连同子目录下的所有文件都会改变 shutdown -选项 时间参数 显示消息 shutdown -k nowshutdown -h +10shutdown -r 10:28 ‘the system will reboot at 10:28’ reboot init 0 关机 init 是切换执行等级的意思,不同的数字代笔不同的执行等级:0关机,3纯命令行模式,5含有图形界面的模式 6重启 ls -a ls -al chgrp 组名 文件名 c

鸟哥的linux私房菜学习笔记 ---第8章-1

1,磁盘的扇区为最小的物理存储单位,大小为512bytes2,扇区sector 组成 柱面cylinder 组成 分区partition 一个分区对应一个文件系统,一个文件系统要挂载到相应的目录上去3,linux的正规文件系统为ext24,inode 记录文件的权限及相关属性和此文件所占用的block的编号 一个文件占用一个inode    block 记录文件的实际内容,文件很大会占用多个block   super block

鸟哥的linux私房菜学习笔记 ---第5章-2

1,bc 简易计算器2,[ctrl]+d end of file3,~代表用户的主文件夹,是个变量 root的主文件夹在 /root4,sync 将内存中的数据写入到硬盘中,一般在关机之前必做步骤,好的习惯5,nano 简单好用的文本编辑器  nano 文件名直接打开新或已有文件  可以直接编辑  ctrl+x 离开 然后选择保存与否 然后回车退出nano6,记住一般^标识Ctrl键 M表示Alt键, 6,info 利用node来存储文件,node的链接仅适用于info page格式的文档  u

鸟哥的linux私房菜学习笔记 ---第7章-2

1,文件内容查阅的命令: cat ,tac nl,more, less,head,tail ,od  文件的查阅参数,显示行号如何显示行号  nl 中的所有参数都是关于如何显示行号的  这里面less的功能更多,更灵活 :空格 下一页 pageup上一页 pagedown 下一页 /string 字符串查询 ?string 反向字符串查询  man的命令就是调用less进行显示的  tail -f 会一直检测文件的更新,实时显示出文件的更新 除非 ctrl+c 才会停止  head -n 20

鸟哥的linux私房菜学习笔记 ---第6章-3

1,使用last命令读取data file ,数据格式文件使用cat读取会出现乱码2,- 普通文件,使用cat或者 last命令来读取  d 目录  l 链接  b 块设备文件  c 字符设备文件 ,一次性读取  s 套接字 网络数据通信  p FIFO 文件

鸟哥的linux私房菜学习笔记1 ---第5章

date 显示日期date +%Y/%m/%d     结果:2015/03/16cal 9 2015man dateman 7 man man -f man 查询所有man的命令man -k man 查询所有含有关键字的man的命令,文档在man下的按键:q, n,N,/....,空格 向下翻页LANG=en_US

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

2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹.l代表连接 第二三四部分 分别代表拥有者.群组.其他,他们都有读.写.可执行三个属性 4.x与d的关系相当重要,如果在目录下不能执行任何命令,那么自然也就无法进入这个目录,也就是说要想操作一个目录,无论是拥有者.群组还是其他都必须具有x属性. 5.chgrp.chown.chmod -R递归持续变

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

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

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

Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux成立的核心网站 GNU所开发的几个重要软件 Linux distributions发行者网址 = w= 1.Linux是什么? 我们知道计算机是由一堆硬件构成的 为了有效控制这些硬件资源,于是就有了操作系统 为了让软件开发人员更容易开发,所以操作系统给开发人员提供了一系列接口 Linux就是这样一套