开始学习Shell脚本【Shell变量】

目录


初识shell

Linux的Shell脚本种类很多,主要学习bash也就是Bourne Again Shell

我打开别人写的shell脚本第一行总会有一个 #!/bin/bash,刚开始我并不知道这是什么意思,感觉并没有什么作用,现在才知道,这是shell脚本的种类标识。

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

执行shell脚本很简单,假设是test.sh的脚本执行它的话直接./test.sh就行了,但是有时候会出现这种情况:

原来是没有让这个脚本具有执行权限,这时候就需要输入:

chmod +x ./test.sh #使脚本具有执行权限

还有一种方式运行shell脚本,那就是sh test.sh
这种应该等于/bin/bash test.sh吧,不知道对不对哈

shell变量

定义变量

定义一个变量a为张三

a="张三"

这里主要注意的就是:

  • 等于左右不要有空格!
  • 变量名可以用数字、字母和下划线,但不能用数字开头
  • 避免shell关键字,例如if、then、else、fi、for、whitle等
  • 一般用大写字母标识常量
  • 避免特殊符号,例如$

使用变量

现在定义了变量名,如何使用呢?那就是前面加个$就行了

echo $a 或者 echo ${a}

这样就会输出zhangsan了

只读变量

变量还有一种叫只读变量,使用readonly命令就可以将变量定义为只读变量

#!/bin/bash
myname="abcdef"
readonly myname

定义为只读变量之后如果后面再进行修改该变量,就会报错

/bin/sh: NAME: This variable is read only.

删除变量

使用unset命令就可以删除变量

unset myname

当然咯,已经被删除的变量就不能使用了。unset命令也不能删除只读变量

变量类型

字符串变量

使用单引号或者双引号来定义的变量

my_string="hello world!"

 整数变量

可以使用declare或者typeset来声明变量并设置属性
这样的变量只包含整数,这里的-i就是生命为整数

declare -i my_integer=18
选项描述
-a声明变量为数组
-A声明变量为关联数组(键值对)
-f显示函数定义
-F显示函数名,但不显式定义
-i声明变量为整数类型
-p显式指定变量的声明信息
-r声明变量为只读
-t声明变量为跟踪变量(在脚本中跟踪变量的值)
-x将变量导出为环境变量
-u声明变量的值为大写
-l声明变量的值为小写

数组变量

shell也支持数组变量,就是在一个变量中存储多个值

my_array=(1 2 3 4 5 6)

或者关联数组

declare -A my_array
my_array["name"]="zhangsan"
my_array["age"]=18

环境变量

这些是操作系统或者用户设置的特殊变量,例如

echo %PATH

shell字符串

单引号和双引号

单引号和双引号都可以定义字符串,但是单引号里面的任何字符都回原样输出,并且单引号中不能出现单独的单引号

str='this is string'

双引号中可以包含变量,也可以出现转义字符

拼接字符串

name="祖国"
str="我是"$name"的花朵,我爱我的"$name
echo $str

获取字符串长度

string="abcdefg"
echo ${#string} # 输出7
echo ${#string[0]} # 输出7

提取字符串

string="hello everyone i am happy"
echo ${string:2:6} # 输出 llo ev

即为从下标为2的索引开始截取,截取长度为6,注意第一个字符的索引值为0

查找字符串

查找字符i或者o的位置,哪个字母先出就计算哪个

string="hello everyone i am happy"
echo `expr index "$string" l` # 输出 3

shell数组

定义数组

bash支持一维数组,不限定数组大小

数组名=(值1 值2 值3 …… 值n)

 也可以单独定义数组的各个分量:

array[0]=value0
array[1]=value1
……

读取数组

${数组名[下标]}

使用@符号可以获取数组中所有的元素

array=(1 2 3 4 5 6)
echo ${array[2]} # 输出3
echo ${array[@]} # 输出1 2 3 4 5 6

获取数组长度

# 取得数组元素的个数
length=${#array[@]}
# 或者
length=${#array[*]}
# 取得数组单个元素的长度
length=${#array[n]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值