Shell是一个用C语言编写的程序,通过Shell用户可以访问操作系统内核服务。Shell既是一种命令语言,又是一种程序设计语言。
Shell编程跟java、php编程一样,需要有一个能编写代码的文本编辑器和一个能解释执行的脚本编辑器。
Linux中的Shell有很多种类,一个系统中可以存在多个shell,我们可以通过下面的命令进行查看。
cat /etc/shells
Bash由于易用和免费,在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。这里我们介绍的就是
一、基本格式
使用vi编辑器创建一个文件hello.sh。
#! /bin/bash
echo "Hello World !"
- “#!”是一个约定的标记,用来告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
- echo命令用于向窗口输出文本
Shell脚本的执行
chmod +x ./hello.sh #使脚本具有执行权限
./hello.sh #执行脚本
我们直接创建的hello.sh文件只具有可读的权限,如果要执行的话,我们还需要赋予它可执行的权限。
我们直接用hello.sh命令执行文件,Linux执行的时候会去PATH中寻找hello.sh,所以我们需要用./hello.sh
二、Shell变量
1、语法格式
变量=值,例如:name="zhangsan"
命名规则:
- 变量名、值和等号之间不能有空格
- 变量名首个字符必须为字母(a-z,A-Z)
- 变量名中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
2、变量的使用
使用定义过的变量,只需要在变量名前加$。花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
其他命令:
readonly variable_name #将变量定义为只读变量,只读变量不能被改变
unset variable_name #删除变量,但不能删除只读变量
3、变量的类型
- 局部变量:
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量 - 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有的程序需要环境变量来保证其正常运行。可以通过set命令查看当前环境变量。 - shell变量:
shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行。
三、Shell参数传递
在执行Shell脚本的时候,可以向脚本传递参数。具体语法如下:
表达式 | 含义 |
---|---|
$n | n代表一个数字,1为执行脚本的第一个参数,以此类推...只能表示第一个到第九个参数 |
${n} | 表示第十个以后的参数 |
$() | 代表当前脚本名称 |
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何职表明有错误 |
例如:
创建一个测试的test.sh文件
#! /bin/bash
echo "第一个参数为:$1";
echo "第十个参数为:$10";
echo "第十个参数为:${10}";
echo "参数的个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
echo "脚本运行的当前进程ID:$$";
执行脚本:
chmod 777 ./test.sh
./test.sh 11 22 33 44 55 66 77 88 99 100 101
执行结果:
“$*”和“$@”的区别
相同点:都表示传递给脚本的所有参数
不同点:
不被" "包含时,$*和$@都以$1 $2… $n 的形式组成参数列表。
被" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的
形式组成一个参数列表