变量的赋值

=

赋值操作(前后都不能有空白)

注意:因为=-eq都可以用作条件测试操作,所以不要与这里的赋值操作相混淆。

=既可以用作条件测试操作,也可以用于赋值操作,这需要视具体上下文而定

简单的变量赋值

#!/bin/bash
# "裸体"变量
echo
# 变量什么时候是"裸体"的, 比如前边少了$的时候?
# 当它被赋值的时候, 而不是被引用的时候.
# 赋值
a=879
echo "The value of \"a\" is $a."
# 使用'let'赋值
let a=16+5
echo "The value of \"a\" is now $a."
echo
# 在'for'循环中(事实上, 这是一种伪赋值):
echo -n "Values of \"a\" in the loop are: "
for a in 7 8 9 11
doecho -n "$a "
done
echo
echo
# 使用'read'命令进行赋值(这也是一种赋值的类型):
echo -n "Enter \"a\" "
read a
echo "The value of \"a\" is now $a."
echoexit 0

简单又不简单的的两种类型的变量赋值

#!/bin/bash
a=23
# 简单的赋值
echo $a
b=$a
echo $b
# 现在让我们来点小变化(命令替换).
a=`echo Hello!`
# 把'echo'命令的结果传给变量'a'
echo $a
# 注意, 如果在一个#+的命令替换结构中包含一个(!)的话,
#+ 那么在命令行下将无法工作.
#+ 因为这触发了Bash的"历史机制."
# 但是, 在脚本中使用的话, 历史功能是被禁用的, 所以就能够正常的运行.
a=`ls -l`
echo $a
echo
echo "$a"
exit 0

使用$(...)机制来进行变量赋值(这是一种比后置引用(反引号`)更新的一种方法). 事实上这两种
方法都是命令替换的一种形式.

# From /etc/rc.d/rc.local
R=$(cat /etc/redhat-release)
arch=$(uname -m)

bash变量是不区分类型的

不像其他程序语言一样,bash并不区分变量的类型,本质上bash变量都是字符串。实际的作用依赖于上下文,Bash也允许比较操作和整数操作,其中的关键因素就是,变量中的值是否只有数值。

#!/bin/bash
# int-or-string.sh: 整型还是字符串?a=2334 #整型.
let "a += 1"
echo "a = $a " # a = 2335
echo  # 还是整型.
b=${a/23/BB}
# 将"23"替换成"BB".
# 这将把变量b从整型变为字符串.
echo "b = $b"
# b = BB35
declare -i b
# 即使使用declare命令也不会对此有任何帮助.
echo "b = $b"
# b = BB35
let "b += 1"
# BB35 + 1 =
echo "b = $b"
# b = 1
echo
c=BB34
echo "c = $c"
# c = BB34
d=${c/BB/23}
# 将"BB"替换成"23".
# 这使得变量$d变为一个整形.
echo "d = $d"
# d = 2334
let "d += 1"
# 2334 + 1 =
echo "d = $d"
# d = 2335
echo# null变量会如何呢?
e=""
echo "e = $e"
# e =
let "e += 1"
# 算术操作允许一个null变量?
echo "e = $e"
# e = 1
echo
# null变量将被转换成一个整型变量.# 如果没有声明变量会怎样?
echo "f = $f"
# f =
let "f += 1"
# 算术操作能通过么?
echo "f = $f"
# f = 1
echo
# 未声明的变量将转换成一个整型变量.
# 所以说Bash中的变量都是不区分类型的.
exit 0

不区分变量的类型既是幸运的事情也是悲惨的事情. 它允许你在编写脚本的时候更加的灵活(但是也足
够把你搞晕!), 并且可以让你能够更容易的编写代码. 然而, 这也很容易产生错误, 并且让你养成糟糕
的编程习惯.

这样的话, 程序员就承担了区分脚本中变量类型的责任. Bash是不会为你区分变量类型的

bash-shell高级编程-变量的赋值相关推荐

  1. Bash Shell脚本编程-变量知识

    Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 ...

  2. shell高级编程笔记(第九章 变量重游)

    第三部分 超越基本 第九章 变量重游 如果变量使用恰当,将会增加脚本的能量和灵活性.但前提是这需要仔细学习变量的细节知识. 9.1 内部变量 $BASH 这个变量将指向Bash的二进制执行文件的位置 ...

  3. linux shell 高级编程,shell高级编程

    条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi ...

  4. Shell脚本编程----变量的使用

    接触Linux Shell脚本编程很久了,但是发现每次学完之后就会忘记,这似乎又印证了那句"好记性不如烂笔头"的言语,事实确实如此,坚持写博客,定期回顾,你会感觉很充实. 这是本系 ...

  5. bash shell简介及变量

    一.简介 Bash(GNU Bourne-Again Shell):是shell的一种: 是一个命令语言解释器(command-language interpreter):可以兼容大多数其他shell ...

  6. linux脚本怎么获取参数,在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?...

    Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现 ...

  7. shell高级编程笔记(第十章 循环和分支)

    第十章 循环和分支 对代码块进行操作是有组织的结构化的shell脚本的关键.为了达到这个目的,循环和分支提供帮助. 10.1 循环 循环就是重复一些命令的代码块,如果条件不满足就退出循环. for 循 ...

  8. 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍

    笔记 #运行级别脚本介绍 #准备工作 #进入目录 cd /home/wgb/shell #建立文件夹 mkdir 0421 #进入目录 cd 0421#运行级别 #运行级别目录 #进入etc目录 [r ...

  9. C语言高级编程:字符串赋值的几种方式

    1. 总结 1)下面两种方式的字符串赋值均正确 char str1[] = "hello str1"; char *str2  = "hello str2"; ...

  10. linux bash sh,linux bash shell.sh编程实例

    1.输出 #!/bin/bash echo "Please type your number:" read a for ((i=1;i<=a;i++)) do for ((p ...

最新文章

  1. python-第二块:time模块和datatime模块
  2. (十)boost库之多线程
  3. SpringCloud实现原理图
  4. 漫画算法:判断2的乘方
  5. angluar cdk_零分钟即可在容器开发套件(CDK)上实现云运营
  6. PyTorch 系列 | 数据加载和预处理教程
  7. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
  8. kafka入门综合概要介绍
  9. 端口镜像 流量过滤_在 AWS 云环境中滥用 VPC 流量镜像抓取网络流量
  10. HEL上清除Oracle10g clusterware的失败安装
  11. [2018.07.17 T2] Palindromes
  12. uniapp将h5链接打包成安卓
  13. 使用Navicat导入备份的数据库文件操作流程
  14. grads之平均气温场与距平
  15. 如何用informatic实现表的增量抽取
  16. matlab的clear函数,[转载]matlab学习笔记(一)之clear,clc,close劝函数
  17. Mybatis新增获取Id
  18. 心情整天都在郁闷浮云往事如云烟,撕心裂肺:伤感心情日志
  19. asp新闻发布系统 html,构建你的网站新闻自动发布系统之一_asp实例
  20. android圆角设置

热门文章

  1. django的sqlite3的使用_2_第一个模型
  2. 离开时自动提示设为首页
  3. nyoj 174 Max Sequence(最大子串和变形)
  4. hdu 5464(简单dp)
  5. poj 1190(剪枝)
  6. hdu-4045 Machine scheduling
  7. HDU 4505 小Q系列故事——电梯里的爱情
  8. js判断是微信、QQ内置浏览器打开页面
  9. Spark跟Flink的常见问题
  10. Java中 equals() 和 == 的区别