linux shell编程学习笔记(3)

发布时间:2019-07-11 09:47:18编辑:auto阅读(1494)

    1、什么是变量

    保存变化的数据

    ——变量名:名称固定,由系统预设或用户自定义

    ——变量值:根据用户设置、系统环境变化而变化


    2、如何定义变量

    ——变量名=变量的值

    2.1变量名的规则

    1)数字、字母、下划线

    2)字母区分大小写

    3)当变量名相同时,后赋值的生效

    4)不能以数字开头

    5)等号两边不能有空格

    6)能以下划线开头

    7)变量名不能有特殊符号

    8)尽量不要使用系统关键字做变量名


    3、如何使用变量

    ——#$变量名


    4、如何输出变量

    ——#echo $变量名


    5、如何删除变量

    ——#unset 变量名


    6、如何查看已经定义的变量

    1env 查看系统环境变量,环境变量一般都是大写

    2set 查看所有变量,包括系统环境变量和自定义变量

    3set | grep 变量名  //查看某个变量


    7、变量的生命周期和范围(作用域)

    7.1局部变量

    1)在脚本里定义的变量只有在脚本里生效

    2)默认定义的变量只在当前的shell里可以使用,无法在子shell使用。要想定义的变量让所有的shell都可以用,要在系统启动时把它定义为全局变量


    7.2全局变量

    定义为全局变量的方法:


    1export 变量名         //已经定义好的变量设为全局变量

    2export 变量名=变量值//将要定义的变量定义为全局变量

    export其实就是声明一下这个变量的意思,让该shell的子shell也知道这个变量的变量值.如果export后面不加任何变量名,则它会声明所有的变量。


    8、变量的累加赋值

    1)#a=100

    #b=$a


    2)#c=$a$b

    3)#c=$a2$b

    4)#c=$a"2"$b


    5)PATH=$PATH:/usr/local/mysql/bin


    [root@ndbA ~]# a=100

    [root@ndbA ~]# echo $a

    100

    [root@ndbA ~]# a=${a}100  

    [root@ndbA ~]# echo $a  

    100100

    [root@ndbA ~]# a=${a}"100"

    [root@ndbA ~]# echo $a    

    100100100

    9、变量的相关配置文件:

    9.1系统级环境变量配置文件

    ——对所有用户生效。执行脚本;定义变量;执行命令

    1/etc/profile

    ——这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等

    2/etc/bashrc  

    ——这个文件主要预设umask以及PS1变量

    9.2用户级环境变量配置文件

    ——仅对某个用户生效,执行脚本;定义变量;执行命令

    1~/.bashrc

    ——定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次

    2~/.bash_profile

    ——该文件包含专用于你的shellbash信息,当登录时以及每次打开新的shell,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。



    9.3/etc/profile/etc/bashrc ~/.bashrc~/.bash_profile的执行顺序

    (1)

    首先这个:  /etc/profile

    然后这个:  /etc/bashrc

    接下来这个:~/.bashrc

    最后这个:  ~/.bash_profile


    (2)验证


    ——以创建目录的方式验证

    1)/etc/profile最后添加mkdir -p /test/profile 命令

    2)/etc/bashrc最后添加mkdir -p /test/bashrc 命令

    3)~/.bash_profile最后添加mkdir -p /test/.profile 命令

    4)~/.bashrc最后添加mkdir -p /test/.bashrc 命令

    5)重启系统

    6)#ls  -la –full-time 查看

    wKiom1MF8LPCuYEVAAQEcWvY4II474.jpg


    由图可知:最先创建的是profile目录,然后是bashrc目录,接下来是.bashrc隐藏目录,最后是.profile隐藏目录。

    可以得出结论:四个配置文件执行的顺序依次是/etcprofile  /etc/bashrc  ~/.bashrc ~/.bash_profile



    10shell里的变量的类型

    10.1系统环境变量:

    ——系统在其他时读取系统的配置文件定义的变量,一般系统环境变量为大小字母。下面是常见的环境变量

    PATH            决定了shell将到哪些目录中寻找命令或程序

    HOME         当前用户主目录

    HISTSIZE         历史记录数

    LOGNAME      当前用户的登录名

    HOSTNAME       指主机的名称

    SHELL           当前用户Shell类型

    LANG           语言相关的环境变量,多语言可以修改此环境变量

    MAIL            当前用户的邮件存放目录

    PWD            当前目录


    10.2预定义变量:

    ——shell里事先预定好的变量,变量名和变量值是固定的,不能直接赋值和修改,需要时可直接调用

    1$$

    ——保存运行的进程的PID

    [root@sqlB ~]# echo $$

    1864      ——bash的进程号

    2$?

    ——保存命令执行结果的返回状态。0表示正常,1-255表示上一条不成功,不同的非零结果代表的返回状态是不同的


    [root@sqlB ~]# cd /etc/

    [root@sqlBetc]# echo $?

    0

    [root@sqlB etc]# cd a

    -bash: cd: a: 没有那个文件或目录

    [root@sqlB etc]# echo $?

    1

    [root@sqlB /]# ls -e /etc/

    ls:无效选项 -- e

    请尝试执行"ls--help"来获取更多信息。

    [root@sqlB /]# echo $?

    2                                             ——代表上条命令的参数错误

    [root@sqlB /]# /etc/passwd

    -bash: /etc/passwd: 权限不够

    [root@sqlB /]# echo $?

    126                   ——代表没有权限执行上条命令

    [root@sqlB /]# aa

    -bash: aa: command not found

    [root@sqlB /]# echo $?

    127                     ——代表上条执行的命令不存在

    3$0

    ——保存当前运行的进程名或脚本名。注意是数字0

    [root@sqlB ~]# echo $0

    -bash

    4$#

    ——保存位置变量的个数

    [root@sqlB ~]# echo $#

    0

    5$*

    ——保存所有为位置变量的值

    [root@sqlB ~]# echo $*

    ——空值,因为没有位置变量

    [root@sqlB ~]#

    6$!

    ——保存后台最后一个进程的PID

    [root@sqlB ~]# lftp&

    [1] 2690

    [root@sqlB~]# echo $!

    2690

    10.3位置变量:

    ——执行脚本或调用函数时后边跟着的参数

    $1

    $2

    $3

    .

    .

    .

    当位置大于9时,需要加上大括号{}

    如:${11}, 11是当成一个整体,$11$1+1

    10.4自定义变量:

    ——由用户自己设置、修改和使用的变量



    11、与变量相关的符号

    11.1单引号:

    ——''   调用变量使用单引号,变量被当做普通字符处理

    11.2双引号:

    ——""   调用变量使用双引号,变量被当做普通字符处理

    单引号和双引号的区别:用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用

    [root@sqlB ~]# name=tom

    [root@sqlB ~]# echo '$name'

    $name

    [root@sqlB ~]# echo "$name"

    tom

    11.3反撇号:

    ——``  将命令的执行输出作为变量值

    [root@sqlB ~]# date

    2014 02 20星期四 11:47:09 CST

    [root@sqlB ~]# day=`date`

    [root@sqlB ~]# echo $day

    2014 02 20星期四 11:47:40 CST

    [root@sqlB ~]#


关键字