shell学习笔记*变量类型和参数传递

可以理解为终端是一个容器或环境,而 Shell 是在这个环境中运行的一个工具。命令提示符是 Windows 系统中的一种终端实现。

shell本身是C开发的程序,用来方便用户和系统交互。shell脚本缀为.sh。如果用 php 写 shell 脚本,扩展名就用 php 。

运行shell的两种方法:

1.作为可执行程序

需要给用户执行权限才可以。这种方法运行的shell在第一行需要输入#! bin/bash这样的代码用来告诉系统用什么解释器运行。然后直接运行shell即可。例如:

./test.sh

2.作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

shell的变量

shell赋值等号两边不要加空格。例如a = 1就是错的,应该是a=1。

shell变量的命名方式和C++差不多。

使用一个定义过的变量时,只需要在变量名字前面加$。数字4上方对应的符号。

使用readonly可以指定一个变量为只读。等想修改它的内容,只能是报错。

unset则是删除变量。使用readonly和unset的时候就不用加$。

变量类型

1.字符串,可以使用"或者'。但是单引号内的内容会原样输出,也不能使用转义字符。单引号成对出现,可以字符串拼接。与之相反,双引号可以用转义字符,而且可以打印变量。

单引号包裹的字符串中换行,这个字符串在实际使用时是不会换行的。可以用双引号转义字符实现换行。


# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'

获取字符串长度:echo ${#string},#代表获取长度

截取字符串${string:1:4}(从第二个字符串到第四个,有点像python的切片)

查找指定字符的索引 :expr index 字符串 要查的  

命令替换(反引号实现):例如
echo `expr index "$string" io`  ,就是把expr index的输出作为echo的参数。

2.数组

shell可以实现数组嵌套,但是没有二维数组。

创建数组的语法:array_name=(value1 value2 ... valuen)

也可以采取直接索引赋值,和python的字典有点类似。

可以通过索引值访问元素。${array_name[12334]}

假如[]里面是@或者*,意思是全部,前面加#就会输出长度,否则就会输出里面所有的值。、

3.关联数组

有点像py字典的阉割版,只支持字符串。

#可以直接定义
declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
#可以先声明后定义
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

如果要访问他,索引值改为【】内的字符即可。

在使用数组时。数组前加一个感叹号 ! 可以获取数组的所有键,例如:

注释

shell的注释非常简单,就是#。

多行注释的实现方法有两种,一种为定义一个函数,里面写注释,但是从来不调用它。

第二种是使用here文档,:命令是一个空命令。我们可以使用here文档的方式多行注释。

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

here文档本来是重定向使用的,用来提供多项输入输出,用来这里恰好。

不只是用EOF 可以用

: <<'COMMENT'
这是注释的部分。
可以有多行内容。
COMMENT

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

还可以直接使用冒号:

: '
这是注释的部分。
可以有多行内容。
'

获取参数

给shell脚本传参,也就是运行的时候直接在后面写上参数。平时运行的命令后面跟的,实际上也是参数,类似于ls -a后面跟的参数。

 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)

可以使用 $1、$2 等来引用传递给脚本的参数。

另外,还有几个特殊字符用来处理参数:

参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

其他特殊的以后再学习、补充。

(感谢菜鸟教程的教学) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值