博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《鸟哥的Linux私房菜》学习笔记(8)——bash脚本编程之变量
阅读量:5173 次
发布时间:2019-06-13

本文共 4867 字,大约阅读时间需要 16 分钟。

一、变量命名                                                            

    1、只能包含字母、数字和下划线,并且不能以数字开头,

    2、不应该跟系统中已有的环境变量重名
    3、命名要有含义

二、变量赋值                                                           

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

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

三、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 $NAMEjerry[root@hao ~]# bash[root@hao ~]# echo $NAMEjerry[root@hao ~]# bash                     [root@hao ~]# echo $NAMEjerry [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 $NAMEjerry[root@hao ~]# bash[root@hao ~]# echo $NAME[root@hao ~]# exitexit[root@hao ~]# echo $NAMEjerry

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

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

3、位置变量

  $n

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

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

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

[root@hao ~]# nano filetest1.sh[root@hao ~]# cat filetest1.sh#!/bin/bashecho $1shiftecho $1shiftecho $1[root@hao ~]# chmod +x filetest1.sh [root@hao ~]# ./filetest1.sh 1 2 3123  

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

用来保存某些特殊数据:

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

[root@hao ~]# ls /varaccount  crash  db     games  lib    lock  mail  opt       run    tmp  ypcache    cvs    empty  gdm    local  log   nis   preserve  spool  www[root@hao ~]# echo $?0[root@hao ~]# ls /varrls: cannot access /varr: No such file or directory[root@hao ~]# echo $?2

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

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

  $#:参数的个数

  $*:参数列表

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

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

[root@hao ~]# nano filetest.sh[root@hao ~]# cat filetest.sh #! /bin/bash#echo $#echo $*echo $@if [ $# -lt 1 ];then    echo "Usage:./filetest.sh ARG1 ARG2 ..."    exit 7fiif [ -e $1 ];then    echo "ok"else    echo "no such file"fi[root@hao ~]# chmod +x filetest.sh [root@hao ~]# ./filetest.sh  0Usage:./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 ~]# setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()...

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

[root@hao ~]# printenvHOSTNAME=haoSHELL=/bin/bashTERM=xterm...

六、追加shell变量                                                      

[root@hao ~]# ANIMAL=pig[root@hao ~]# ANIMAL=$ANIMAL:goat[root@hao ~]# echo $ANIMALpig: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/bashls /varcat /etc/inittab[root@hao ~]# chmod +x first.sh[root@hao ~]# ./first.shaccount  crash    db     games  lib    lock  mail  opt       run      tmp  ypcache     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:

转载于:https://www.cnblogs.com/mingcaoyouxin/p/4080094.html

你可能感兴趣的文章
Struts 2 常用技术
查看>>
树形DP
查看>>
python flask解决上传下载的问题
查看>>
语法测试
查看>>
CES1
查看>>
CES2
查看>>
文件方式实现完整的英文词频统计实例
查看>>
单个SWF文件loading加载详解(转)
查看>>
SQLServer中的CTE通用表表达式
查看>>
C# 3.0 LINQ的准备工作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
如何防止Arp攻击
查看>>
ClassList 标签的用法
查看>>
小细节:Java中split()中的特殊分隔符 小数点
查看>>
【编程思想】【设计模式】【行为模式Behavioral】中介者模式Mediator
查看>>