西数超哥博客
运维经验教程分享

【原创】shell学习笔记第二天(变量)

部分命令说明以及案例来自于鸟哥和网络。

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,变量设置的规则(重要)

  1. 变量与变量内容以一个等号=来连结,如下所示:
    hello=howareyou
  2. 等号两边不能直接接空格符,如下所示为错误:
    hello=  howareyou 或者 hello  =howareyou都不行。
  3. 变量名称只能是英文字母与数字,但是开头字符不能是数字如下为错误:
    2hello=howareyou
  4. 变量内容若有空格符可使用双引号『或单引号’将变量内容结合起来,但
    • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
      var=”lang is $LANG”则echo $var可得『lang is en_US』
    • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
      var=’lang is $LANG’则echo $var可得lang is $LANG

    单双引号说明:单引号不具有变量置换功能,保持原内容。 双引号具有变量置换功能。

  5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, ‘等)变成一般字符;
  6. 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号`命令`或 $(命令)。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:(注意这个反单引号会优先执行)
    『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
  7. 若该变量为扩增变量内容时,则可用 “$变量名称” 或 ${变量} 累加内容,如下所示:
    『PATH=”$PATH”:/home/bin』 (变量置换后显示获取内容然后连接后边的内容,将其赋值给变量新值)
  8. 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量
    『export PATH』
  9. 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好,最好养成这个习惯) ;
  10. 取消变量的方法为使用 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

赞(0)
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除。本站原创内容未经允许不得转载:西数超哥博客 » 【原创】shell学习笔记第二天(变量)