每天学习一点点,从量变到质变
今天,跟大家详细讲讲Shell编程中的变量。讲解的大纲如下
(2).如果按作用范围的话,可分为自定义变量和环境变量(后面会将自定义变量和环境变量)。
毫无悬念,自定义变量,就是自己想怎么定义就怎么定义的变量。那怎么定义呢? 定义的格式:
变量名=变量值(等号两边可不能有空格哈,不像你在其他软件编写java等语言时经常隔一个空格)
例如:
x=5 myName=”苦逼的码农”
如果在屏幕打印显示变量的值呢?
我们可以通过:echo $变量名 来输出变量的值,$就像是一个取值符号一样。如下所示
不过需要注意的话,如果你不是用远程工具操作并且没有给Linux配置中文显示的话,是无法打印中文字符的哦。
我们还可以用命令 set 来查看当前用户中的所有变量。我就不演示了,可以自己输入set -> 回车试试。
如下所示,删了之后在echo $myName就报错了
学过c或者java等语言的都知道,有局部变量和全局变量这东西。环境变量就类似于全局变量。我们上面那种定义的变量就类似于局部变量。
也就是说,我们定义的普通变量的作用范围是局部的,啥是局部?就是只在当前的Shell中生效。而环境变量的作用范围是全局的,它在当前的Shell以及和这个Shell的所有子Shell中都生效。 说明:当我们在命令行输入 bash -> 回车,就会进入另一个bash,这个bash是之前那个bash的子Shell。
下面我用普通变量做一个演示,证明它到了子Shell就不存在了。
定义myName="苦逼的码农"
echo $myName
输出:苦逼的码农
执行 bash ->回车,进入子Shell
在执行 echo $myName
输入:啥东西也没有
但是如果是环境变量的话,到了子Shell那它还是存在的。那如何定义环境变量呢?其实环境变量只需要在我们定义普通变量的时候,前面在加个export关键词就行了。如下
或者先定义成局部变量在声明为环境变量
至于它的作用范围演示就略过。
想必我们在安装软件等事情的时候,经常会去配置我们的环境变量PATH路径。其实在我们系统内部就已经帮我们定义了很多环境变量了。这些环境变量的作用几乎也已经固定了。例如PATH这个环境变量,我们经常会把一些可执行文件的路径配置到PATH上,当我们在运行一些可执行程序时,就会去PATH那些路径找有没有这个可执行文件的存在。下面列出一些常用的环境变量:
大家可以通过echo $变量名打印出来看看勒。
假如我们要写一个从键盘上输入两个数字a, b,然后计算 a+b,最后输出结果的脚本。你要怎么做呢?其实这个时候就涉及到参数问题。我们要写一个脚本,这个脚本要从键盘接受两个数。这种参数我们称之为位置参数,这个时候就要用到位置参数变量。有如下一些位置参数变量:
下面我们来完成那个a+b的脚本
(1).adder1.sh,内容如下:
#!/bin/bash
#第一个参数
num1=$1
#第二个参数
num2=$2
#两个参数之和
sum=$(($num1+$num2))
#输出结果
echo $sum
调用输出:
bash adder1.sh 3 4 (也可以用另一种方式调用,我之前有讲过)
输出结果:7
那我要是想接受键盘10数,然后计算他们的和呢?你可能会想定义10变量,然后在计算。不感觉很麻烦?那我要是想计算n个数之和呢?这些用#n这个位置变量不好办了吧?
这下我们就可以用$@这个位置变量了。它会接受全部变量,然后它会把每个参数区别对待存起来。直接看程序如下所示:
#!/bin/bash
for i in "$@"
do
sum=(($sum+$i)) #$i代表第几个参数
done
echo "sum=$sum"
调用输出:
bash sum1.sh 1 2 3 4
输出:sum=10
为啥不用$*?上面已经说了,它把所有参数看出一个整体,并没有把每个参数区别对待。下面看看$*, $@, $#这三个以及区别
#!/bin/bash
for i in "$*"
$*只会循环一次
do
echo "The i is :$i
done
for j in "$@"
#循环多次
do
echo "The j is :$j
done
echo "the sumber:$#
调用运行:
bash sum1.sh 1 2 3
输出结果:The i is : 1 2 3
The j is : 1
The j is : 2
The j is : 3
The sumber:3
希望,你们都能上机尝试一下哦。
直接看命令的格式:
例子如下:
#!/bin/bash
read -p "Please input your name: " -t 20 name
echo $name
read -p "Please input your password" -s password
echo $password
调用输出:
本次讲解到这里勒,下篇将Shell中的运算符。
ps:那些代码等排版排的好好的,不知为啥到了手机端都丢失了...