从个人的测试岗位面试经历中看,百分之八九十的面试官都会问“熟悉哪些Linux命令?会写Shell脚本吗?”

常用的Linux命令一般都能答上几个,但如果面试官问的太具体参数的用法,回答的时候会有点心里没底;Shell脚本就更不用说了,基本没动手写过。

为了能更好的适应工作,后续会学习Linux&Shell相关的知识,不定期更新到博客园,以便记录、回顾。

1.Shell变量

从变量的实质上来说,变量名是指向一片用于存储数据的内存空间。

Shell变量是一种弱类型的变量,即声明变量时不需要指定其变量类型,也不需求遵循“先声明再使用”的规定,想用即可用。

2.命名规范、变量赋值、变量取值、取消变量

2.1 变量名命名规范:

2.2.1 由英文字母、数字、下划线组成,不能以数字开头

2.2.2 区分大小写

2.2.3 不能使用bash的关键字--疑问:怎么查看bash的所有关键字?

2.2 变量赋值:

2.1.1 var_name1=studing               #变量名=变量值,=两边无空格

2.1.2 var_name2='shell studing'     #变量值中有空格时必须使用引号括起,单、双引号都可以

2.1.3 var_name3="$var_name1"  或 var_name3=$var_name1   #如果变量值引用的是其他变量,则不能使用单引号括起

[root@testserver ~]# var_name1=studing
[root@testserver ~]# var_name2='shell studing'
#var_name3引用var_name1的值
[root@testserver ~]# var_name3=$var_name1
[root@testserver ~]# echo $var_name3
studing
[root@testserver ~]# var_name3='$var_name2'
[root@testserver ~]# echo $var_name3
$var_name2
[root@testserver ~]# var_name3="$var_name2"
[root@testserver ~]# echo $var_name3
shell studing
[root@testserver ~]#

2.3 变量取值:变量名前加$,如$var_name 或 ${var_name},两种方式都可以,推荐使用${var_name}。

2.4 取消变量:将变量从内存中释放,语法:unset 变量名/函数名

[root@testserver ~]# echo $var_name3
shell studing
[root@testserver ~]# unset var_name3
[root@testserver ~]# echo $var_name3 [root@testserver ~]#

3.局部变量、环境变量

3.1 局部变量

其作用域只在声明它的Shell中,对其他Shell无效。每个Shell有自己的变量空间,彼此互不影响。

例如:打开两个Shell窗口,如下图:

3.2 环境变量:即全局变量。

使用export命令将当前Shell的变量导出为环境变量,可用于子Shell继承、使用。子Shell、父Shell切换方法:在当前Shell中输入bash并回车,即进入了子Shell;在子Shell中输入exit即退出子Shell返回到父Shell。

export命令语法:export VAR=value #VAR变量名,value值,等号两边无空格

从如下示例中,可以看出:环境变量可从父Shell传给子Shell,但子Shell的环境变量不能传给父Shell。

步骤:

1.登录Shell,即为父Shell,输入bash进入子Shell

2.=两边有空格,执行命令报错

3.在子Shell中定义变量VAR,并导出为环境变量

4.输入bash进入子Shell的子Shell,可称为孙Shell

5.输出子Shell中定义的变量VAR

6.输入exit退出孙Shell

7.输入exit退出子Shell

8.在父Shell中输出子Shell中定义的变量VAR,为空

4.常见的bash预设环境变量

变量BASH:Bash Shell的全路径

[root@testserver ~]# echo $BASH

/bin/bash

变量BASH_VERSION:Bash Shell的版本

[root@testserver ~]# echo $BASH_VERSION
4.1.()-release

变量CDPATH:用于快速进入某个目录。

示例:如/usr/local/shell_studying/test_shell目录,每次进入test_shell目录需输入很长的路径。定义变量CDPATH='/usr/local/shell_studying/',执行cd test_shell时在当前目录查找是否有该目录,没有则进入CDPATH定义的目录中的test_shell目录,如下:

[root@testserver ~]# CDPATH='/usr/local/shell_studying/'
[root@testserver ~]# cd test_shell
/usr/local/shell_studying/test_shell
[root@testserver test_shell]#

变量EUID:记录当前用户的UID。root用户的UID为0

[root@testserver ~]# echo $EUID

变量FUNCNAME:在用户函数体内部,记录当前函数体的函数名。

示例:创建funcname.sh文件并执行。

[root@testserver shell_studing]# cat funcname.sh
#!/bin/bash
funcname(){
echo $FUNCNAME
}
funcname
[root@testserver shell_studing]# chmod +x funcname.sh
[root@testserver shell_studing]# ./funcname.sh
funcname
[root@testserver shell_studing]#

变量HISTCMD:记录下一个命令在history命令中的编号。

示例:执行history命令后,最近1条命令的编号是1009,执行echo $HISTCMD命令的编号为1010,所以下一条命令的编号为1011。

[root@testserver shell_studing]# history
....
-- :: root ./funcname.sh
-- :: root history
[root@testserver shell_studing]# echo $HISTCMD

变量HISTFILE:记录history命令记录文件的位置。

[root@testserver ~]# echo $HISTFILE
/root/.bash_history

变量HISTFILESIZE:设置HISTFILE文件记录命令的行数。限制历史命令记录的行数。

[root@testserver ~]# echo $HISTFILESIZE

变量HISTSIZE:命令缓冲区的大小。执行的命令,先记录在命令缓冲区,在缓冲区满或退出Shell时才将命令写入$HISTFILE

[root@testserver ~]# echo $HISTSIZE

变量HOSTNAME:展示主机名。

[root@testserver shell_studing]# echo $HOSTNAME
testserver

变量HOSTTYPE:展示主机的架构。如i386、i686、x86_64等。

[root@testserver shell_studing]# echo $HOSTTYPE
x86_64

变量MACHTYPE:主机类型的GNU标识。一般为“主机架构-公司-系统-gnu”

[root@testserver shell_studing]# echo $MACHTYPE
x86_64-redhat-linux-gnu

变量LANG:设置当前系统的语言环境。

[root@testserver shell_studing]# echo $LANG
en_US.UTF-
[root@testserver shell_studing]# export LANG=zh_CN.UTF-

变量PWD:记录当前目录。

[root@testserver shell_studing]# echo $PWD
/usr/local/testuser/shell_studing

变量OLDPWD:记录之前的目录。

示例:当前目录/usr/local/testuser/shell_studing,cd /root 切换路径后,/root为当前目录,则/usr/local/testuser/shell_studing为之前的目录,即$OLDPWD

[root@testserver shell_studing]# echo $PWD
/usr/local/testuser/shell_studing
[root@testserver shell_studing]# cd /root
[root@testserver ~]# echo $OLDPWD
/usr/local/testuser/shell_studing
[root@testserver ~]#

变量PATH:代表命令的搜索路径。

[root@testserver ~]# echo $PATH
/usr/local/module/maven-3.1./bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3./bin:/root/bin
#设置PATH变量,新增路径/usr/local/testuser/至PATH
[root@testserver ~]# export PATH=/usr/local/testuser/:$PATH
[root@testserver ~]# echo $PATH
/usr/local/testuser/:/usr/local/module/maven-3.1./bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3./bin:/root/bin
[root@testserver ~]#

变量PS1:命令提示符。\u是用户名,\h是主机名,\W是当前工作目录,\$是UID的替换字符:如UID为0,则替换成#(root用户),否则替换成$。

[root@testserver ~]# echo $PS1
[\u@\h \W]\$

其他变量:通过执行 man bash 查看man文件,在Shell Variable中查看(下图截取部分命令)。

【学习参考文档】

  1. 书籍:《Linux系统命令及Shell脚本实践指南》 王军 著;
  2. Shell教程|菜鸟教程:https://www.runoob.com/linux/linux-shell.html

【写在末尾】文章如有错误之处,欢迎评论指正,非常感谢。

有兴趣可关注同名微信公众号“粒粒的测试笔记”,号内会分享各种测试相关知识,感谢关注。

【学习笔记】Shell-1 变量:命名规范、变量赋值/取值/取消、局部变量/全局变量、预设环境变量的更多相关文章

  1. (转)IOS学习笔记-2015-03-29 int、long、long long取值范围

    unsigned - - unsigned - - unsigned __int64的最大值: __int64的最小值:- unsigned __int64的最大值:  

  2. javascript 变量 命名规范 变量的作用域

    原文:javascript 变量 命名规范 变量的作用域 大家好,我是小强老师,今天讲解的是变量 变量 小时候我们学过  这个 应用题 :  X+1=2; 问  X 等于几?  答案是 1 对了,很聪 ...

  3. [转载]python 变量命名规范

    原文地址:python 变量命名规范作者:loveflying python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范.于是自己总结了一些,可供参考. 模块名: 小写字母,单词之间用 ...

  4. 变量命名规范及str类型

    变量命名规范: 1.单词之间用_分开 add_num() 2.全局变量,大写 PI,NUMBER() 3.实例变量,以_开头 _example() 4.私有实例变量 __private() 5.普通函 ...

  5. Shell变量的作用域:Shell全局变量、环境变量和局部变量

    Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...

  6. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  7. SQL反模式学习笔记4 建立主键规范【需要ID】

    目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...

  8. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  9. Postman 设置全局变量和环境变量设置(之 图形界面设置变量)

    在Postman中有两种方法添加变量:1.图形界面操作添加   2.执行代码添加 1.图形界面操作添加,点击右上角齿轮按钮手动添加所需测试环境:   2.点击右上角的小眼睛可以编辑.添加“全局变量”和 ...

随机推荐

  1. 005-循环结构(上)-C语言笔记

    005-循环结构(上)-C语言笔记 学习目标 1.[掌握]switch-case结构 2.[理解]case语句穿透 3.[理解]Xcode断点调试 4.[理解]while循环结构初体验 5.[掌握]w ...

  2. AJ学IOS 之CoreLocation反地理编码小Demo输入经纬度得到城市

    AJ分享,必须精品 一:效果 输入经纬度,可以得到相应的地名 二:思路 跟地里编码差不多 1.获取用户输入的经纬度 2.根据用户输入的经纬度创建CLLocation对象 3.根据CLLocation对 ...

  3. Linux常用命令02(远程管理)

    01 关机/重启 序号 命令 对应英文 作用 01 shutdown 选项 时间 shutdown 关机/重新启动 1.1 shutdown shutdown 命令可以 安全 关闭 或者 重新启动系统 ...

  4. Linux下安装python3环境搭建

    Linux下python3环境搭建 Linux安装软件有哪些方式? rpm软件包 手动安装 拒绝此方式 需要手动解决依赖关系 yum自动化安装 自动处理依赖关系 非常好用 源代码编译安装,可自定义的功 ...

  5. Spring IoC getBean 方法详解

    前言 本篇文章主要介绍 Spring IoC 容器 getBean() 方法. 下图是一个大致的流程图: 正文 首先定义一个简单的 POJO,如下: public class User { priva ...

  6. [PHP] 获取IP 和JS获取IP和地址

    通过js获取 服务器 ip 服务器端口 服务器地址 var address=window.location.href; thisDLoc = document.location; var hostpo ...

  7. SpringMVC数据传递及乱码问题

    基础环境搭建请参考SringMVC入门程序 一.SpringMVC数据处理 1:resful 路径传值 http://localhost/get/1/2 /* http://localhost/get ...

  8. MySql的数据库方言问题

    在使用hibernate将po(一般对象类)转化为数据库表时,如果mysql的版本为5.0之前的,则方言写为:<property name="dialect">org. ...

  9. react: typescript custom hooks useAsyncTable

    define basic data: const SET_QUERY = "SET_QUERY"; const TOGGLE_LOADING = "TOGGLE_LOAD ...

  10. springmvc配置数据源方式

    1 阿里巴巴的druid数据源 <!-- 配置数据源 使用的是Druid数据源 -->-<bean destroy-method="close" init-met ...