Shell 入门系列 (一): 变量
变量
shell 中的变量是弱类型的, 可以像PHP 中一样去使用, 和PHP变量的区别在与 函数中的变量默认为全局变量. 同时还有环境变量的概念.
shell 脚本执行时, 可以向脚本中传入变量
变量定义
- 定义方式: 等号旁边不能有空格
- 变量名: 变量名只能包含英文字母/数字/下划线, 变量名不能以数字开头, 不能使用bash里的关键字
#!/bin/sh #定义变量 name='michael' age=18 #只读变量, 变量值不能被修改, 修改则报错 readonly gender='男' #变量使用, 加花括号是为了识别变量边界, 如字符串拼接等 skill=Java echo '${skill}Script' echo $name echo ${age} #变量销毁, unset 不能删除只读变量,会报错 unset age unset gender echo $age #变量修改 name='handsome'
变量类型
shell 中的变量类型有三种: 字符串, 数字, 数组
1. 字符串
字符串有单引号和双引号两种, 和PHP类似. 双引号里可以有变量和转义字符.
字符串变量定义
#!/bin/sh
#使用单引号定义一个字符串变量, 会原样输出 hello $name
name='michael'
str1='hello $name'
echo $str1
#使用双引号定义一个字符串变量, 会输出 hello michael
str2=''hello $name"
echo $str2
- 字符串操作
2. 数字
3. 数组
数组的定义
数组的定义: array_name=(value0 value1 value2 value3)
#!/bin/sh
#定义一个数组
my_skill=('php' 'laravel' 'mysql' 'linux' 'html/css' '其他技术')
# 列出 /etc 下的文件和文件夹,当做数组赋值给etc_file 变量, 并遍历数组
etc_files=`ls /etc`
for f in $etc_files; do
echo $f
done
## 上面例子可以使用 for file in $(ls /etc)
# 数组的使用 todo
数组的操作
#!/bin/sh
#定义一个数组
my_skill=('php' 'mysql' 'redis' 'linux' 'javascript' 'html' '其他技能')
#遍历数组
for k in ${my_skill[*]};
do
echo $k
done
#读取数组元素
echo '数组中的第一个元素为:'${my_skill[0]}
#修改数组第一个元素(也可以使用此方法增加元素)
my_skill[0]='php7'
#获取数组的所有元素, 以字符串显示
echo '修改后的my_skill数组(以字符串显示)为:'${my_skill[*]}
#数组增加新元素
my_skill+=('laravel')
echo '修改后的my_skill数组(以字符串显示)为:'${my_skill[*]}
变量的作用域
变量的作用域(scope), 表示变量的生效范围
1. 环境变量
#!/bin/sh
# 系统的环境变量 /etc/profile
echo $PATH;
#子进程中可以使用的变量
2. shell 脚本变量
脚本内定义的变量, 退出即销毁
例1: 函数外调用函数内定义的变量
#!/bin/sh
#函数外调用函数中定义的变量
first_func()
{
# 定义或重新赋值一个全局变量, 函数执行后这个变量在函数外部可用
a=1
# 设置一个函数内部的局部变量
local b=2
}
first_func
echo $a
# 以下没有输出
echo $b
输出 1
例2: 函数内调用函数外定义的变量
#!/bin/sh
# 函数外调用函数中定义的变量
second_func()
{
# 设置一个局部变量
local b=2
echo $b
}
b=3
second_func
echo $b
输出 2 3
脚本外的变量
运行shell 命令时, 附带的参数
运行 ./a.sh 'hello world' 'michael'
#!/bin/sh
# 脚本执行命令中附带的参数
echo '脚本的文件名:'$0
echo '脚本外的第一个参数:'$1
echo '脚本外的第二个参数:'$2
echo '脚本的参数个数:'$#
echo '向脚本传递的所有参数,字符串显示:'$*
echo '当前运行脚本的id号:'$$
echo "$@"
输出:
脚本的文件名:/usr/local/sh/test.sh
脚本外的第一个参数:hello world
脚本外的第二个参数:michael
脚本的参数个数:2
向脚本传递的所有参数,字符串显示:hello world michael
当前运行脚本的id号:10087
hello world michael
本作品采用《CC 协议》,转载必须注明作者和本文链接