https://www.shellscript.sh/variables1.html
变量是一个可操作(读、写)的内存块的名字。
尝试-1
创建一个变量:
root@iZwz:~/labs# sh mytest.sh
Hello.
root@iZwz:~/labs# cat mytest.sh
#!/bin/bash
MY_MESSAGE="Hello."
echo $MY_MESSAGE
赋值号两边不应该有空格!~
尝试-2
从标准输入读取一行:
root@iZwz:~/labs# sh mytest.sh
WHAT IS YOUR NAME?
xkfx
Hello xkfx - HOPE YOU WELL.
root@iZwz:~/labs# cat mytest.sh
#!/bin/bash
echo WHAT IS YOUR NAME?
read MY_NAME
echo "Hello $MY_NAME - HOPE YOU ARE WELL."
2、关于变量
变量里面到底是什么?
一切都是“字符串”。
如果你认为 sum 里面是数字就大错特错了。
不论是整数、实数或是一切你喜欢的类型,
都将作为字符串存储。
只是 let 让解释器把变量当成 ...
(向后引用 :P)
变量的作用域
export 和 . (dot) 是两个很常用的命令,弄清楚这两个命令到底让计算机做了什么,就能很容易理解“变量的作用域”了 ~
Ⅰ、关于 export:
export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。 一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。 来自: http://man.linuxde.net/export
mytest.sh 的代码在下面下面!
root@iZwz:~/labs# export MSG="AAAAAAAA"
root@iZwz:~/labs# sh mytest.sh
MSG=AAAAAAAA
MSG=VALUE-2
Ⅱ、一旦一个脚本执行完毕,它所创建的“环境”、“变量”都将被破坏,我们可以通过 . 来引用脚本,而不是创建一个新的 shell 来运行它:
root@iZwz:~/labs# cat mytest.sh
#!/bin/bash
echo "MSG=$MSG"
MSG="VALUE-2"
echo "MSG=$MSG" root@iZwz:~/labs# MSG="VALUE-1"
root@iZwz:~/labs# sh mytest.sh # RUN THROUGH sh COMMAND, WHICH CREATE A NEW SHELL TO RUN IT.
MSG=
MSG=VALUE-2
root@iZwz:~/labs# . mytest.sh # RUN THROUGH . COMMAND, WHICH USES CURRENT SHELL TO RUN IT.
MSG=VALUE-1
MSG=VALUE-2
3、何时使用 ${} ?
#!/bin/bash
echo "What is your name?"
read USER_NAME
echo "Hello $USER_NAME"
echo "I will create you a file called ${USER_NAME}_file"
touch "${USER_NAME}_file"
root@iZwz:~/labs# sh mytest.sh
What is your name?
xkfx
Hello xkfx
I will create you a file called xkfx_file
root@iZwz:~/labs# ls
mytest.sh xkfx_file