Linux 什么是Shell脚本中重新定义只读删除变量教程

摘要: Linux 什么是Shell脚本中重新定义只读删除变量教程,Shell变量,Shell脚本,定义变量,重新定义变量,shell脚本,好用的shell脚本指南,您值得拥有

  为使Shell编程更有效,系统提供了一些Shell变量。Shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。

  Shell将其中任何设置都看做文本字符串。有两种变量,本地和环境。严格地说可以有 4种,但其余两种是只读的,可以认为是特殊变量,它用于向Shell脚本传递参数。

  

定义变量

  定义变量时,变量名不加美元符号($),如:

  variableName="value"

  注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  首个字符必须为字母(a-z,A-Z)。

  中间不能有空格,可以使用下划线(_)。

  不能使用标点符号。

  不能使用bash里的关键字(可用help命令查看保留关键字)。

  变量定义举例:

  myUrl=http://www.linuxdaxue.commyNum=100

  

使用变量

  使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:

  your_name="linuxdaxue"

  echo $your_name

  echo ${your_name}

  变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

  for skill in Ada Coffe Action Java

  do

  echo "I am good at ${skill}Script"

  done

  如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

  推荐给所有变量加上花括号,这是个好的编程习惯。

  

重新定义变量

  已定义的变量,可以被重新定义,如:

  myUrl="http://www.linuxdaxue.com"

  echo ${myUrl}

  myUrl="http://www.linuxdaxue.com"

  echo ${myUrl}

  这样写是合法的,但注意,第二次赋值的时候不能写 $myUrl="http://www.linuxdaxue.com",使用变量的时候才加美元符($)。

  

只读变量

  使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

  下面的例子尝试更改只读变量,结果报错:

  #!/bin/bash

  myUrl="http://www.linuxdaxue.com"

  readonly myUrl

  myUrl="http://www.linuxdaxue.com"

  运行脚本,结果如下:

  /bin/sh: NAME: This variable is read only.

  

删除变量

  使用 unset 命令可以删除变量。语法:

  unset variable_name

  变量被删除后不能再次使用;unset 命令不能删除只读变量。

  举个例子:

  #!/bin/sh

  myUrl="http://www.linuxdaxue.com"

  unset myUrl

  echo $myUrl

  上面的脚本没有任何输出。

  

显示所有本地shell变量

  使用set命令显示所有本地定义的Shell变量。

 

  显示所有本地shell变量

变量类型

  运行shell时,会同时存在三种变量:

 

 1) 局部变量

  局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  

2) 环境变量

  所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  

3) shell特殊变量

  shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。下面就介绍下shell中的特殊变量。

  

Shell特殊变量

  Shell 中的特殊变量主要有以下几个:

  $0, $#, $*, $@, $?, $$

  下面会分别介绍下这几个变量和含义和使用方法。

  $0 当前脚本的文件名

  $# 传递给脚本或函数的参数个数。

  $* 传递给脚本或函数的所有参数。

  $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会单独讲到。

  $? 上个命令的退出状态,或函数的返回值。

  $$ 当前进程的ID。对于 Shell 脚本,就是这些脚本所在的进程ID

  $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2

  

命令行参数

  运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

  而$0代表当前脚本的文件名。

  通过下面的例子看下这几个参数的区别:

  #!/bin/bash

  echo "文件名: $0"

  echo "第一个参数 : $1"

  echo "第二个参数 : $2"

  echo "所有参数: $@"

  echo "所有参数: $*"

  echo "参数个数: $#"

  

通过

  ./test.sh LinuxDaxue .com 执行

  执行结果:

  文件名:./test.sh

  第一个参数:LinuxDaxue

  第二个参数:.com

  所有参数:LinuxDaxue.com

  所有参数:LinuxDaxue.com

  参数个数:2

  

$* 和 $@ 的区别

  $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

  但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

  

$?获取退出状态

  $? 可以获取上一个命令的退出状态。

  所谓退出状态,就是上一个命令执行后的返回结果。

  退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

  不过,也有一些命令返回其他值,表示不同类型的错误。

本文由 帝一博客 原创发布。用户在本站发布的原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。独家文章转载,请联系邮箱:17762131@qq.com。获得授权后,须注明本文地址: https://bubukou.com/mljb/1136.html

网友留言评论

0条评论