Shell 教程
- shell 是一种命令语言. 也是一种程序设计语言.
- shell 脚本
- shell 环境 : 常见的有 Bourne Shell(/usr/bin/sh或/bin/sh)
第一个shell脚本
#! 是一个约定的标记. 它告诉系统这个脚本用的是什么编译器来执行.
echo 命令用于向窗口输出文本.
#!/bin/bash
echo "Hello World !"
运行shell脚本有两种方法:
将上面代码保存为 test.sh 并cd到相应目录. chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
直接运行解释器 其参数就是shell脚本文件名 /bin/sh test.sh
/bin/php test.php
shell变量
定义变量
使用变量
使用一个定义过的变量. 只要在变量名前面加 $ 符号即可. your_name="jay"
echo $your_name
echo ${your_name}
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
已定义的变量 可以被重新定义. your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name
注意:
- 第二次赋值的时候不写成
$your_name="alibaba" .
- 使用变量的时候才加
$ 符号.
只读变量
删除变量
unset : 可以删除变量
unset variable_name
变量被删除后不能再次使用.
unset 不能删除只读变量.
变量类型
- 运行shell时,会同时出现三种变量:
- 局部变量 : 仅在当前shell实例中有效.其他shell程序不能访问局部变量
- 环境变量 : 所有程序,包括shell启动程序,都能访问环境变量.
- shell变量 : shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量. 有一部分是局部变量. 这些变量保证了shell的正常运行
shell 字符串
- 字符串 是shell编程中最常用的数据结构.
- 字符串可以用
单引号 . 也可用 双引号
- 单双引号的区别
单引号
双引号
拼接字符串
your_name="jay"
greeting="hello,"$your_name"!"
greeting_1="hello,${your_name}!"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string}
提取子字符串
string="runoob is a great site"
echo ${string:1:4}
查找子字符串
shell 数组
定义数组
在shell中,用括号表示数组. 数组元素用 空格 分割开来 #数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
#或者
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量
array_name[0]=value0
array_name[1]=value1
echo ${array_name[0]}
读取数组
读取数组元素的一般格式为:
valuen=${array_name[n]}
使用 @ 符号可以获取数组中所有元素 echo ${array_name[@]}
获取数组的长度
shell 传递参数
reference
在执行shell加班时,向脚本传递参数,脚本内获取参数的格式为 $n
demo:向脚本传递三个参数.并输出. 其中 $0 为执行的文件名 #!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
$ chmod +x test.sh
$ ./test.sh 1 2 3
还有几个特殊字符用来处理参数
参数 |
说明 |
$# |
传递到脚本的参数个数 |
$* |
以一个单字符串显示所有向脚本传递的参数 |
$$ |
脚本运行的当前进程ID号 |
$! |
后台运行的最后一个进程的ID号 |
$@ |
与$*相同 |
$- |
显示shell使用的当前选项 |
$? |
显示最后命令的退出状态.0表示没有错误.其他值表明有错误. |
shell 基本运算符
算术运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
算术运算符
原生的 bash 不支持简单的数学运算. 但可以通过其他命令来实现. 如 awk 和 expr
expr 是一款表达式计算工具. 使用它能完成表达式的求值操作. #!/bin/bash
val='expr 2 + 2'
echo "两数之和为: $val"
注意: 条件表达式要放在方括号之间. 并且要有空格.
[$a == $b]
注意:
val=`expr $a * $b`
echo "a * b : $val"
关系运算符
- 关系运算符之支持数字!
- 不支持字符串. 除非字符串的值是数字.
运算符 |
说明 |
-eq |
检测两个数是否相等.相等返回true |
-ne |
是否不相等. |
-gt |
检测左侧是否大于右侧 |
-lt |
检测左侧是否小于右侧 |
-ge |
左侧是否大于等于右侧 |
-le |
左侧是否小于等于右侧 |
布尔运算符
! : 非运算
-o : 或运算. 有一个表达式为true则true
-a : 与运算
逻辑运算符
字符串运算符
= : 检测两个字符串是否相等
!= : 检测两个字符串是否不相等
-z : 检测字符串长度是否为0. 为0返回true
-n : 检测字符串长度是否为0 不为0返回true
str 检测字符串是否为空. 不为空返回true
文件测试运算符
操作符 |
说明 |
-b file |
检测文件是否是块设备文件 |
-c file |
检测文件是否为字符设备文件 |
-d file |
检测文件是否为目录 |
-f file |
检测文件是否为普通文件(不是目录也不是设备文件) |
-g file |
检测文件是否设置了 SGID 位 |
-k file |
检测文件是否设置了 粘着位sticky bit |
-p file |
检测文件是否为有名管道 |
-u file |
检测文件是否设置了 SUID 位 |
-r file |
检测文件是否可读 |
-w file |
检测文件是否可写 |
-x file |
检测文件是否可执行 |
-s file |
检测文件是否为空(文件大小是否大于0) |
-e file |
检测文件(包括目录)是否存在 |
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|