一、初识bash

Bash是一种解释型语言,但它也提供了交互式接口,支持变量,因此提供了编程环境,所以可以称bash为程序语言。

解释型语言属于弱类型语言,其特点为:

1.它不强制区分变量类型,即无论存储什么数据,默认均以字符格式(ASCII码)存储。

2.不需要事先声明变量,需要时直接使用,直接赋值;

在弱类型语言中,定义变量通常为:

[set] VAR_NAME=Value//set可以省略

引用变量为:

${VAR_NAME}//大多数情况下花括号可以省略

花括号不能省略的情况:有时候变量后面紧接着一个字符,会造成变量名无法识别,此时

就需要花括号来加以区分,如以下例子:

# Animal=”Pig”

# echo“there is a $Animal.”

# echo“there some $Animals.”

# echo“there some {$Animal}s.”

撤销变量:释放之前占用的内存空间已供其他进程或程序使用

unset VAR_NAME//注意只用变量名,不加$

二、bash的主要特性

1.使用变量

2.支持快捷键,且快捷键可以自定义

使用别名的格式为:

# alias 别名=’正常命令’

撤销别名的格式为:

# unalias 别名

比如windows中我们使用cls来清屏,而在Linux中使用clear命令。如果想保留windows的使用习惯,就可

以使用别名:

# alias cls=‘clear’

# unaias cls

如果不想使用别名而使用原来的命令,则可以使用“\命令”。

注意:别名只对当前shell有效,即使是同一个用户重新启动的shell,也不能使用别名;如果要使

别名永久有效,需要定义在配置文件。

4.”),~ (表示命令的家目录)

5.支持管道

6.支持输入、输出和重定向

7.支持编程

8.支持命令行自动补全和路径补全

a)命令补全:

采用的方式是在输入命令的部分字符后,按下tab键,bash会自动搜索在PATH环境变量下所有可以执行文件,以补全此命令。但需要注意的是,输入的部分字符必须能够唯一标识某命令;如果无法唯一标识,则再敲一次tab键,将会显示所有以“命令的部分字符”开头的命令。

b)路径补全:

路径补全不是找的环境变量PATH,敲tab键后将会根据命令,搜索输入的部分路径,以寻找唯一标识,如果输入的部分路径不能唯一标识,则再敲一次tab键,显示所有以“部分路径”开头的路径。注意如果输入的路径是相对路径,则从当前路径开始搜索。

使用命令补全和路径补全,可以避免出错误

三、bash中的快捷键

Ctrl+A:快速跳至命令行首

Ctrl+E:快速跳至命令行尾

Ctrl+U:删除命令行首至当前光标所在处的内容

Ctrl+U:删除命令行尾至当前光标所在处的内容

Ctrl+L:用于清屏幕,等同于clear命令

Ctrl+C:取消或终止当前命令

Ctrl+Z:将当前命令送至后台执行

四、bash的变量类型

1.本地变量:只对当前shell的进程有效,换一个shell(即使是同一个用户开启的子shell)就失效了。

2.局部变量:它的范围比本地变量更小。即只限于部分代码块,不包括当前shell的所有位置。其定义方式为

local VAR_NAME=Value

3.环境变量:它的作用范围比本地变量大,它对当前shell及其子shell都有效(在shell中又打开了一个shell)其声明方式为

export VAR_NAME=Value

4.位置变量:常见的有——$1, $2,...

5.特殊变量:常见的有——$$, $!, $#, $?

尽管bash是一种弱类型语言,但bash的变量是可以声明的,甚至可以指定类型,使用的命令是:declare,例如:

# Declare -i VAR_NAME        //声明一个整型变量,被声明的变量可以进行运算了

# Declare -x VAR_NAME        //声明一个环境变量

# Declare -a VAR_NAME//声明一个数组

五、变量的命令法则

1.变量的命名只能使用字母、数字和下划线

2.由于Linux区分大小写,因此不同的大小写字母可以作为不同的变量名,但通常情况下不建议这样做。变量名建议做到“见名知意”,即名字能够表示变量的基本含义。

3.抱持风格统一,例如全部使用大写或者小写,而不是一会儿大写,一会儿小写。

4.建议首字母大写,采用“驼峰式”,即两个单词的首字母大写,如UserName。

5.环境变量建议采用大写。注意我们自己起变量名时不要和原有的环境变量名重名,否则会覆盖原有变量。比如USER这样的变量名不要使用。

六、如何在bash中查看环境变量

1.查看环境变量

可以使用以下命令:

# printenv

或者

# export   //注意不带任何参数

2. 查看所有变量(包括环境变量和本地变量)

可以使用以下命令:

# set

七、在bash中如何引用变量

引用变量最常用的方式是:$(VAR_NAME)

但如果要实现变量替换,则需要在双引号中实现,这是由bash中引号的作用决定的:bash中引号的主要有三种:

双引用:弱引用,可以实现变量的替换

单引号:强引用,不替换变量,而是现实字符串本身

反引号:位于键盘上Esc键下方(``),作用是实现命令引用, ``等同于$()。它可以用于将某一命令的执行结果赋值给一个变量。

例如要显示当前时间:

# echo“The time is `date +%T`”

或者是:

# echo“The time is $(date +%T)”

再如要创建一个文件,要以当前日期为文件名,可以执行如下命令:

# touch file-$(date -%F).txt

或者是

# touch file-`date -%F`.txt

八.变量替换

Bash语言是一种弱类型语言,所有数据都是以字符的方式存放,引用变量进行替换的标准形式为:${VAR_NAME},这里的花括号{}通常可以被省略。实际上,变量替换还有一些其他的形式,可以应用于不同的场景:

A.${parameter:-word}:Use  Default Values.  If parameter is unset ornull, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

使用默认值。这里的parameter是指的变量名,如果没有定义变量或变量的值为空,则变量名后面用使用冒号加一个值,该值会作为变量的默认值使用;如果变量已经被赋值了,则冒号后的默认值不会替换原有的值。

[root@localhosttutor]# Name=Jerry

[root@localhosttutor]# echo ${Name:-Tom}Jerry

#尽管设定了默认值,如果变量已经赋值,则不使用默认值而使用赋的值

[root@localhosttutor]# unset Name

#撤销变量

[root@localhosttutor]# echo ${Name:-Tom}Tom

#没有为变量Name赋值,就引用其默认值

[root@localhosttutor]# echo $Name#直接引用变量,则为空

B. ${parameter:=word}:Assign Default Values.  If parameter is unset or null, the expansionof word is assigned to parameter.  Thevalue of parameter is then substituted. Positional parameters and special parameters may not be assigned to inthis way.

赋予默认值。和前一种情况非常类似,不同的是,这里冒号后面的值不仅作为默认值,并且会保存在变量中。

[root@localhosttutor]# echo ${Name:=Max}Max

#变量Name使用默认值Max

[root@localhosttutor]# echo $NameMax

#变量Name被赋予了初值

C. ${parameter:?word}

Display Error if Null or Unset.  If parameter is null or unset, the expansionof word (or a message to that effect if                         word is not present) is written tothe standard error and the shell, if it is not interactive, exits.  Otherwise, the value of             parameteris substituted.

如果变量值为空,或没有声明变量,则问号?后面的值会定向至标准错误输出。

[root@localhosttutor]# unset Name

[root@localhosttutor]# echo ${Name:? No Value}-bash:Name:  No Value

#?后面的值错误信息输出

D. ${parameter:+word}

Use Alternate Value.  If parameter is null or unset, nothing issubstituted, otherwise the expansion of word is substituted.

如果变量没有声明或值为空,则不作任何操作;如果变量已经赋值了,则用加号+后面的值替换原来赋的值。

[root@localhosttutor]# echo $Name#变量Name没有值

[root@localhosttutor]# echo ${Name:+Mickey}#不作任何操作

[root@localhosttutor]# Name=Neal

[root@localhosttutor]# echo $NameNeal

#变量被赋值Neal

[root@localhosttutor]# echo ${Name:+Mickey}Mickey

#用加号+后的值来替换变量原有的值

[root@localhosttutor]# echo $NameNeal

#加号并不是为变量重新赋值,只是在某些特定的场合才进行替换

上述四种用法都不会为变量赋予初始值。现在考虑一种情况,某个脚本需要和用户进行交互,如果用户输入了值,则将该值赋给变量,否则就使用默认值。可以使用下面这种方式来赋初始值:

read-p “A String” -t String

String=${String:-word}

#这里的减号可以替换成加号+或者等号=

linux快捷键 赋值,2_Shell语言———bash的快捷键、变量声明、引用变量及变量替换...相关推荐

  1. c ++一行给多个变量赋值_C语言变量

    变量是程序可操作的存储区的名称. 变量其实只不过是程序可操作的存储区的名称.C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的 ...

  2. Linux 命令之 declare -- 声明或显示 shell 变量

    文章目录 一.命令介绍 二.命令格式 三.命令选项 四.命令示例 (一)声明变量并赋值 (二)将变量设置为环境变量 (三)将变量设置为只读,不可修改 (四)将变量声明为整数并进行计算 (五)显示变量的 ...

  3. frame中src怎么设置成一个变量_Go 语言设计哲学之七:变量声明须一致

    Go 语言,使用变量之前需要先进行变量的声明. var s string = "Golang"n := 666 Go 语言有两类变量 包级别(package varible):在 ...

  4. 【常用】linux 命令是什么的缩写(命令缩写)?vi快捷键,linux操作,c语言缩写,计算机相关,其他缩写,xshell操作,apt-get命令大全

    文章目录 linux缩写 Linux man快捷键 Linux vi快捷键 linux终端操作(shell:bash.sh) linux快捷键 apt-get 命令大全 xshell操作 Linux ...

  5. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)

    @Author : Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到C ...

  6. RHEL6基础之六RHEL6基本命令bash常用快捷键变量环境变量命令的返回值

    命令帮助信息获取 sh 执行脚本 -x选项来查看这个脚本执行过程的 [root@localhost ~]# sh 1.sh [root@localhost ~]# sh -x 1.sh [root@l ...

  7. Linux用户必须知道的常用终端快捷键

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 作者:Linux公社 链接:https://www.linuxidc.com 简介:以下是一些 ...

  8. 阿酷快捷键怎么使用_必须收藏!Linux用户必须知道的常用终端快捷键

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 简介:以下是一些每个 Linux 用户必须使用的键盘快捷键.使用命令行时,这些 Linux 快捷键将提升你的工作效率.你知道什么把专业用户 ...

  9. Linux终端命令行下的常用快捷键使用

    Linux终端命令行下的常用快捷键 文章目录: ***`下面我只介绍常用的命令,其他的用的几乎很少,常用自然就是总会用的到的,而且用处比较大的,可以提高工作效率的,下面我亲自测试这些命令都是亲测可行的 ...

最新文章

  1. 怎么这一个c语言的dll文件,如何在C中获取DLL文件的版本信息
  2. 客观地认识程序员心中的恐惧
  3. 在ubuntu上mysql出现ERROR 1045(28000):Access denied for user ‘young‘@’localhost‘(using password:NO)...
  4. ORACLE 回收站管理
  5. java中的Sort函数,你值得看
  6. json增加反斜杠 php_thinkphp5.1.x~5.2.x版本反序列化链挖掘分析
  7. 如何在JUnit4中按特定顺序运行测试方法?
  8. 高通audio数据到Speaker播放流程
  9. 【转】Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
  10. simulink过零检测的作用
  11. vs2010中文旗舰版,vs2013,vs2015企业版激活秘钥
  12. 网页版excel数据批量导入数据库
  13. 删除-驱动人生节能省电方案
  14. 计算机病毒note01
  15. w10 桌面计算机垃圾桶,解答win10我的电脑怎么放在桌面
  16. 粉红色梦幻唯美的家庭相册模板
  17. 图像处理(九)-图片和数组的转换
  18. @Value的诸多用法
  19. 直播预告 | 浙大CADCG实验室专场二
  20. mysql主键自增策略_MySQL 自增主键机制

热门文章

  1. java远程方法调用(rmi)--好_RMI-Java远程方法调用的实现(二)
  2. 【小心勿喷,吃饭中的小朋友最好别看】史上最搞笑的前端vue文件命名,没有之一,呵呵哒
  3. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用LuaRocks示例
  4. 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
  5. setuid和setgid
  6. MIB in SNMP
  7. 一、Tableau基础
  8. tensorflow学习笔记————分类MNIST数据集
  9. 安装完DevExpress14.2.5,如何破解它呢?
  10. 我的软考之路(九)——总结篇