专栏首页python3linux shell编程学习笔记(3)

linux shell编程学习笔记(3)

1、什么是变量

保存变化的数据

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

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

2、如何定义变量

——变量名=变量的值

2.1变量名的规则

(1)数字、字母、下划线

(2)字母区分大小写

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

(4)不能以数字开头

(5)等号两边不能有空格

(6)能以下划线开头

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

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

3、如何使用变量

——#$变量名

4、如何输出变量

——#echo $变量名

5、如何删除变量

——#unset 变量名

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

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

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

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

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

7.1局部变量

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

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

7.2全局变量

定义为全局变量的方法:

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

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

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

——该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的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 查看

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

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

10、shell里的变量的类型

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 ~]#

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • megeedu Linux+Python

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;

    py3study
  • 管理H3C交换机

    2,创建VLAN 1,并指定VLAN 1为交换机的管理VLAN [H3C] vlan 1 [H3C-vlan1] quit [H3C] managemen...

    py3study
  • python Flask离线安装与测试

    Flask是用python进行web开发时,常见的python web框架。 如果服务器可以连接到外网,可以简单的用 pip install Flask 直接将...

    py3study
  • 是否为同一二叉搜索树

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 走近源码:Redis如何清除过期key

    业务组的同学告诉我说很多用户的帐号今天被强制下线。我们的帐号系统正常的逻辑是用户登录一次后,token的有效期可以维持一天的时间。现在的问题是用户大概每10分钟...

    Jackeyzhe
  • ARM C++交叉编译环境构建方法

    接下来的说明以Ubuntu Desktop 19.10为例进行,18.04也没有问题。

    面向对象思考
  • 安利一下WebView内存泄漏的方法

    Xiaolei123
  • Zircon - Fuchsia 内核分析 - 启动(平台初始化)

    Zircon 是 Google 新操作系统 Fuchsia 的内核,基于 LK - Little Kernel 演变而来。而 Little Kernel 前面一...

    刘盼
  • Nginx配置详解

    公众号php_pachong
  • 每日算法系列【LeetCode 875】爱吃香蕉的珂珂

    珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。

    godweiyang

扫码关注云+社区

领取腾讯云代金券