简介
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。
详解
1.shell变量
变量名和等号之间不能有空格;
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc`
推荐给所有变量加上花括号,这是个好的编程习惯,以免出现引用变量varible时出现$varible123引起混淆的情况;
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变,如:
myUrl="http://www.w3cschool.cc" readonly myUrl
使用 unset 命令可以删除变量,语法为:unset 变量名
字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
– 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
– 单引号字串中不能出现单引号(对单引号使用转义符后也不行);– 双引号里可以有变量
– 双引号里可以出现转义字符双引号中可以拼接字符串,如:
your_name="world" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 #均输出hello world !
字符串长度获取:
string="abcd" echo ${#string} #输出 4
字符串截取:
string="runoob is a great site" echo ${string:1:4} # 输出 unoo
查找字串位置:
string="runoob is a great company" echo `expr index "$string" is` # 输出 8
bash支持一维数组(不支持多维数组),并且没有限定数组的大小,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
可以不使用连续的下标,而且下标的范围没有限制。
在Shell中,用括号来表示数组,数组元素用”空格”或换行符号分割开
读取数组指定下标的元素值:
${数组名[下标]}
获取数组所有元素:
${array_name[@]}
获取数组的长度:
# 取得数组元素的个数 length=${ #array_name[@]} # 或者 length=${ #array_name[*]} # 取得数组单个元素的长度 lengthn=${ #array_name[n]}
2.shell参数传递
可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,0代表脚本文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…
如test.sh:
#!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3";
执行./test.sh 1 world reference,输出内容为:
执行的文件名:./test.sh 第一个参数为:1 第二个参数为:world 第三个参数为:reference
几个用于处理传递参数的字符含义:
$# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,整体做为一个字符串回显。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数,每个参数做为单独的字符串回显。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
3.shell运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
如:
#!/bin/bash
a=3
b=5
cc=`expr $a