宽容他人,放过自己。

Shell变量

Posted on By anchoriteFili

#!/bin/bash

# "#!"是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种shell
# echo 用于向窗口输出文本。
echo "你真漂亮"

# shell变量
# 定义变量时,变量名不加美元符号($,PHP语言中变量需要)
# 注意,变量名和等号之间不能用空格,这可能和你熟悉的语言不一样
# 变量命名规则
# 1. 变量名和等号之间不能有空格
# 2. 首个字符必须为字母
# 3. 中间不能有空格,可以使用下划线
# 4. 不能使用标点符号
# 5. 不能使用bash里的关键字


# 使用一个定义过的变量
# 使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="天语习习"
echo $your_name
echo ${your_name}

# 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器事变变量的边界
for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done
#如果不给skill变量加花括号,就会输出I am good at ${skill}Script 推荐给所有的变量添加花括号

# 已定义的变量,可以被重新定义
your_name="天语习习2"
echo $your_name
# 注意,第二次赋值的时候不能写$your_name="天语习习2"


# 只读变量 使用readonly命令可以将变量定义为只读变量,只读变量不能被改变
myUrl="http://www.baidu.com"
readonly myUrl
# myUrl="eqeqeqweqweqw"
# 重写运行出现错误 line 39: myUrl: readonly variable

# 删除变量
# 使用unset命令可以删除变量
# unset myUrl # readonly变量不能删除
unset your_name
echo $your_name # 将没有输出


# 变量类型
# 1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
# 2. 环境变量 所有程序,包括shell启动的程序,都能访问环境变量,这些程序需要环境变量来保证其运行。
# 3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,一部分是局部变量,
#    这些变量保证了shell的正常运行


# Shell字符串
# 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
# 单双引号的区别跟PHP类似。
str='this is a string'
echo $str

# 单引号字符串的限制:
# 单引号里的任何字符串都会原样输出,单引号字符串中的变量无效
# 单引号中不能使用单引号(对单引号使用转义字符页也不行)

# 双引号的有点:
# 双引号可以有变量
# 双引号里可以出现转移字符
your_name='zhaohongya'
str="Hello, I know you are \"$your_name\"!"
echo $str

# 拼接字符串
your_name="zhaohongya"
greeting="hello, "$your_name"!" # “$"形式拼接 将字符串以变量的形式添加到字符串中
greeting_1="hello, ${your_name}!" # ${}形式拼接
echo $greeting $greeting_1


# ${#} 获取字符串长度
string="eqeqweqweqweqweqweqweqweqweqwe"
echo ${#string} # 我去,真输出了

# 提取子字符串
string="runoob is a great site"
echo ${string:1:4} # 从字符串第2个字符开始截取4个字符 输出unoo

# 查找子字符串
# 查找字符"i"或"s"的位置:
string="runoob is a great company"
#echo `expr index "$string" is`  # 出现expr: syntax error 前面是`反引号,而不是单引号`


# Shell数字
# bash支持一维数组,不支持多维数字,并且没有限定数组的大小。

# 定义数组
array_name=(1 2 3 4 5 6 7)
array_name[0]=5

# 读取数组
# 读取数组的一般格式为${数组名[下标]}
echo ${array_name[0]}

# 可以使用@符号获取数组中的所有元素
echo ${array_name[@]}

# 获取数组的长度

# 获取数组元素的个数
echo ${#array_name[@]}
# 或
echo ${#array_name[*]}

# 取得数组单个元素的长度
echo ${#array_name[0]}