部分命令说明以及案例来自于鸟哥和网络。
1,什么是变量?
变量和其他编程了解到的概念一样,变量就是以一组文字或符号等,来取代一些配置或者是一串保留的数据!shell中的变量都是由$符和另一个符号组成的。
[root@aliserver ~]# echo hello hello [root@aliserver ~]# echo $hello [root@aliserver ~]# hello=howareyou [root@aliserver ~]# echo $hello howareyou
在 bash 当中,当一个变量名称尚未被配置时,默认的内容是空的!
env 观察环境变量与常见环境变量说明:env
用set查看所有变量(环境变量和自定义变量)
一般程序都是成功返回0 ,失败返回非零!
2,变量的取用 echo
显示变量echo $变量名 或echo ${变量名} 比如 echo $HOSTNAME 或者 echo ${HOSTNAME}
3,变量设置的规则(重要)
- 变量与变量内容以一个等号=来连结,如下所示:
hello=howareyou - 等号两边不能直接接空格符,如下所示为错误:
hello= howareyou 或者 hello =howareyou都不行。 - 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
2hello=howareyou - 变量内容若有空格符可使用双引号『或单引号’将变量内容结合起来,但
- 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
var=”lang is $LANG”则echo $var可得『lang is en_US』 - 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
var=’lang is $LANG’则echo $var可得lang is $LANG
单双引号说明:单引号不具有变量置换功能,保持原内容。 双引号具有变量置换功能。
- 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
- 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, ‘等)变成一般字符;
- 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号`命令`或 $(命令)。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:(注意这个反单引号会优先执行)
『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』 - 若该变量为扩增变量内容时,则可用 “$变量名称” 或 ${变量} 累加内容,如下所示:
『PATH=”$PATH”:/home/bin』 (变量置换后显示获取内容然后连接后边的内容,将其赋值给变量新值) - 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
『export PATH』 - 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好,最好养成这个习惯) ;
- 取消变量的方法为使用 unset :『unset 变量名称』例如取消 hello的配置:unset hello
[root@aliserver ~]# unset hello
[root@aliserver ~]# echo $hello
[root@aliserver ~]#
4,变量分类:
按变量作用域来分:全局变量,局部变量
按用途划分:系统变量环境,位置参数,用户自定变量
按数据类型:字符串变量,数值变量
5,变量键盘读取、数组与宣告: read, array, declare
read命令: 这个命令还是很有用read后边跟变量名,用户从键盘获取内容赋值。用作交互的时候可以使用。
[root@www ~]# read [-pt] variable
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
-s :隐藏输入的内容,用于机密信息
[root@aliserver kernel]# read dns
8.8.8.8
[root@aliserver kernel]# echo $dns
8.8.8.8
这种方式就是从键盘获取一个变量的内容进行赋值,没有提示而已,不是很直观。下边加上-p 提示就更直观了。
[root@aliserver kernel]# read -p “please input new dns:” dns
please input new dns:1.2.3.4
[root@aliserver kernel]# echo $dns
1.2.3.4
[root@aliserver kernel]#
变量定义declare、typeset:
[root@www ~]# declare [-aixr] variable
选项与参数:
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r :将变量配置成为 readonly 类型,该变量不可被更改内容,也不能 unset
让变量 sum 进行 100+300+50 的加总结果
[root@www ~]# sum=100+300+50
[root@www ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
[root@www ~]# declare -i sum=100+300+50
[root@www ~]# echo $sum
450
补充说明:(1)在默认的情况底下, bash 对于变量有几个基本的定义:变量类型默认为字符串,所以上述sum=100+300+50会将sum视为一个字符串而不是一个数值。如果要数值,请先定义成数字类型。另外,bash 环境中的数值运算,默认最多仅能到达整数形态,所以 1/3 结果是 0。 (2)declare 也是个很有用的功能。尤其是当我们需要使用到底下的数组功能时, 他也可以帮我们宣告数组的属性。
数组array: var[index]=content ,直接以 ${数组} 的方式来读取
举例:
[root@aliserver kernel]# var[1]=”how”
[root@aliserver kernel]# var[2]=”are”
[root@aliserver kernel]# var[2]=”are”
[root@aliserver kernel]# var[3]=”you”
[root@aliserver kernel]# echo “${var[1]} ${var[2]} ${var[3]}”
how are you
6,别名alias和历史命令history
alias 可以显示别名命令记录。使用这个命令可以自定义一些命令命令比如alias cls=’clear’ 但注意,系统重启后命令就不在了。如需长久有效,要编辑.bashrc 将这个命令添加到这里才可以永久有效。取消的时候直接unalias cls就可以了。
history 显示历史命令,用法一个鸟哥的图就可以完全理解了。
[root@www ~]# history [n] [root@www ~]# history [-c] [root@www ~]# history [-raw] histfiles 选项与参数: n :数字,意思是『要列出最近的 n 笔命令行表』的意思! -c :将目前的 shell 中的所有 history 内容全部消除 -a :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles , 则默认写入 ~/.bash_history -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中; -w :将目前的 history 记忆内容写入 histfiles 中! 范例一:列出目前内存内的所有 history 记忆 [root@www ~]# history # 前面省略 1017 man bash 1018 ll 1019 history 1020 history # 列出的信息当中,共分两栏,第一栏为该命令在这个 shell 当中的代码, # 另一个则是命令本身的内容喔!至于会秀出几笔命令记录,则与 HISTSIZE 有关! 范例二:列出目前最近的 3 笔数据 [root@www ~]# history 3 1019 history 1020 history 1021 history 3 范例三:立刻将目前的数据写入 histfile 当中 [root@www ~]# history -w # 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中! [root@www ~]# echo $HISTSIZE 1000
补充下两个特殊变量:
$ 本身也是个变量,目前这个 Shell 的pid. 这个命令写shell脚本经常遇到!!!
?:这个变量是代表上一个运行的命令所回传的值, 上面这句话的重点是上一个命令与回传值两个地方。当我们运行某些命令时, 这些命令都会回传一个运行后的代码。一般来说,如果成功的运行该命令, 则会回传一个 0 值,如果运行过程发生错误,就会回传错误代码才对!一般就是以非为 0 的数值来取代。
7,变量运算符:
算术运算符:+,-,*,/,>>,<<
逻辑运算符:&&(与),||(或),!(非)
比较运算符:=(-eq),>(-gt),<(-lt),!=(-ne),<=(-le),>=(-ge)
操作符:-x (判断可执行文件是否存在)
-f(判断普通文件是否存在)
-r(判断只读文件)
-w(判断可写文件)
-s数字(判断文件大小)
转载请注明:西数超哥博客www.ysidc.top» 【原创】shell学习笔记第二天(变量)
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top