Shell脚本之变量与传递参数1
何为Shell脚本
第⼀个shell脚本
#!/bin/bash
echo "hello world"
shell是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户可以通过这个界⾯访问操作系统内核服务。Ken Thompson的sh是第⼀种UnixShell,Windows Explorer 是⼀个典型界⾯shell。Shell脚本(shell script),⼀种专门为shell编写的脚本程序。业界所说的shell通常是指shell脚本,但是我们因该知道shell和shell脚本是两个不同的概念。Shell编程和JavaScrit,PHP编程⼀样,只要有个能编写代码的⽂本编辑器和⼀个解析执⾏的脚本解释器即可。
Linux的shell种类众多,常见的有:
Bourne Shell (/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)<;易⽤,免费,⼤多数Linux系统默认>
C Shell (/usr/bin/csh)
K Shell (/usr/bin/ksh)
Shell for Root(/sbin/sh)
#!:告诉系统其后路径所指定的程序即是解释此脚本⽂件的Shell程序。
#!/bin/bash
echo "hello World !"
echo 命令⽤于窗⼝输出⽂本。
运⾏Shell脚本有两种⽅法:
1.作为可执⾏程序
将上⾯的代码保存为 test.sh 并cd到相应⽬录
chmod +x ./text.sh #使脚本具有执⾏权限
.
/text.sh #执⾏脚本
2.作为解释器参数
这种运⾏⽅式是,直接运⾏解释器,其参数就是shell脚本⽂件名。
/bin/sh text.sh
/bin/php text.php
这种⽅式运⾏脚本,不需要在第⼀⾏指定 解释器信息。
Shell 变量
your_name=“runoob”
注意,变量名和等号之间不能有空格。
命名只能使⽤英⽂字母,数字和下划线,⾸个字符不能以数字开头。
中间不能有空格,可以使⽤下划线(_)
不能使⽤标点符号。
不能使⽤bash⾥的关键字(可⽤help命令查看关键字)
使⽤⼀个定义好的变量,只需要在变量名前⾯加$美元符号即可例如
your_name="name1"
echo $name1
echo ${name1}
变量名外⾯的花括号是可选的,加不加都可以,加花括号是为了帮助解释器识别变量的边界
已定义的变量可以被重新定义,如:
your_name="aa"
echo ${your_name}
your_name="bb"
echo ${your_name}
只读变量
使⽤readonly命令可以将变量定义位只读变量,只读变量的值不能被改变。
#!/bin/bash
myUrl="le"
readonly myUrl
myUrl="www.runoob"
运⾏脚本的结果如下:
/bin/sh:MAME:This variable is readonly.
your_name:readonly variable
删除变量
使⽤unset命令可以删除变量。
unset variable_name
变量被删除之后不能再次使⽤。unset命令不能删除只读变量。
实例
#!/bin/bash
myUrl="le"
unset myUrl
echo ${myUrl}
上述例⼦没有任何输出
变量的类型
运⾏Shell的时候会同时存在三种变量:
1)局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
2)环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序还需要环境变量来保证其正常运⾏,必要的时候shell脚本也可以定义环境变量。
3)shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有⼀部分是环境变量,⼀部分是局部变量,这些变量保证shell的正常运⾏
Shell 字符串
字符串是shell编程中最常⽤的数据类型(常⽤的数据类型,数字,字符串)
字符串可以使⽤双引号,也可以不⽤引号。单双引号的区别跟PHP类似。
单引号
str='this is a string'
单引号的限制:
单引号⾥任何字符都会原样输出,单引号字符串的变量是⽆效的;
单引号字符串中不能出现单独的⼀个单引号,但是可以成对出现作为字符串拼接使⽤。
双引号
your_name=‘runoob’
str="hello,I konw you are \"$your_name\"! \n" #这⾥使⽤转义字符 \ 让"直接输出
echo -e $str
输出的结果为:
hello,I know you are "runoob"!
双引号的优点:
双引号⾥可以有变量
双引号⾥可以出现转义字符
拼接字符串
your_name="runoob"
#使⽤双引号拼接
greeting="hello,"$your_name" !"
greeting_1="hello,${your_name} !"
echo $greeting $greeting_1
#使⽤单引号拼接
greeting_2='hello,'$your_name' !'
greeting_3='hello,${your_name} !'
echo $greeting_2 $greeting_3
输出的结果是:
hello,runoob ! hello,runoob !
hello,runoob ! hello,${your_name} !
获取字符串长度
string="abcd"
echo ${#string} #输出4
提取⼦字符串
以下实例从字符串第⼆个字符开始截取4个字符:
string="runoob is a great site"
echo ${string:1:4} #输出unoo
查⼦字符串
查字符i或o的位置(那个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io` #输出4 检测的是o的位置
string="irunoob is a great site"
echo `expr index "$string" io` #输出1 检测的是i的位置
特别注意查⼦字符串中的 ` 是反引号,不是单引号’
Shell数组
bash⽀持⼀维数组(不⽀持多维数组),并没有限定数组的⼤⼩。
类似于C语⾔,数组元素的下标由0开始编号,获取数组中的元素要利⽤下标,下标可以是整数或算术表达式,其值应⼤于或等于0.定义数组
在Shell中,⽤括号来表⽰数组,数组元素⽤"空格"符号分割开。定义数组的⼀般形式:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使⽤连续的下标,⽽且下标的范围没有限制。
读取数组
格式
${数组名[下标]}
例如:
valuen=${array_name[n]}
还可以使⽤@符号获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的⽅法与获取字符串长度的⽅法相同,例如:
#取得数组元素的个数
length=${#array_name[@]}
#或者
length=${#array_name[*]}
#取得数组单个元素的长度
lengthn=${#array_name[n]}
shell的注释
以#开头的⾏就是注释,会被解释器忽略。
通过每⼀⾏加⼀个#号设置多⾏注释
多⾏注释还可以使⽤以下格式
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使⽤其他符号
多⾏注释还可以使⽤以下格式
:<<'
注释内容...
注释内容...
注释内容...
'
多⾏注释还可以使⽤以下格式
:<<!
注释内容…
注释内容…
注释内容…
!
========================================================== Shell 传递参数
我们可以在执⾏Shell脚本时,向脚本传递参数,脚本内获取的格式为 $n。n代表⼀个数字1为执⾏脚本的第⼀个参数,2为执⾏脚本的第⼆个参数,以此类推…
实例
以下实例我们向脚本传递三个参数,并分别输出,其中$0为执⾏的⽂件名
#!/bin/bash
echo "shell传递参数实例";
echo "执⾏的⽂件名: $0";
echo "第⼀个参数为: $1";
echo "第⼆个参数为: $2";
echo "第三个参数为: $3";
为脚本设置可执⾏权限,并执⾏脚本。其输出结果如下所⽰
$ chmod +x text.sh
$ ./text.sh 1 2 3
shell 传递参数实例!
执⾏的⽂件名: ./text.sh
第⼀个参数为: 1
第⼀个参数为: 2
第⼀个参数为: 3
$# 传递到脚步的参数个数
$* 以⼀个单字符串显⽰所有向脚本传递的参数。
如"$*"⽤ " 括起来的情况,以"$1 $2 ... $n"的形式输出所有参数。
$$ 脚本运⾏的当前进程ID号
$@ 与$*相同但是使⽤时加引号,并在引号中返回每个参数。
如"$@"⽤ " 括起来的情况,以"$1" "$2"..."$n"的形式输出所有参数。
shell脚本返回执行结果$- 显⽰Shell使⽤的当前选项,与set命令功能相同。
$? 显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误。
#!bin/bash
echo "Shell 传递参数实例";
echo "第⼀个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为⼀个字符串显⽰:$*";
执⾏脚本,输出结果如下所⽰:
$ chmod +x text.sh
$ ./text.sh 1 2 3
Shell 传递参数实例!
第⼀个参数为1:1
参数个数为:3
传递的参数作为⼀个字符串显⽰:1 2 3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论