一、shell 1、先说下 vim :Vim是从 vi 发展出来的一个文本编辑器。vim分为3种模式:命令模式,输入模式 和底线命令模式。 a、命令模式: 用户刚刚启动vi /vim ,便进入了命令模式。此状态下敲击键盘的动作会被vim 识别为命令,而非输入字符。常见得是: i: 切换到输入模式,可以输入字符 x: 删除当前光标所在处的字符 :切换到 底线命令模式,可以在最后一行输入命令(已经进入 输入模式的 可以通过esc 键 回到命令模式)
b、输入模式:在命令模式下输入i 进入输入模式。输入模式下的常用按键: ·字符按键以及shift组合,输入字符 ·enter 回车键换行 ·back space 退格键,删除光标前的一个字符 ·del 删除键,删除光标后的一个字符 ·方向键 在文本中移动光标 ·home /end 移动光标移动到 首行 /行尾 ·insert 切换光标为输入/替换模式,光标将变成竖线 或下换线 ·esc 退出输入模式,切换到命令模式
c、底线命令模式 在命令模式下 按 : (英文冒号)便进入了底线命令模式。该模式下可以输入单个或多个字符的命令, 基本命令为 q 退出程序 和 w 保存文件 按esc 可随时退出底线命令模式
2、打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell), 扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。 输入一些代码 ,第一行一般是这样的 : #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。 echo命令用于向窗口输出文本。 注意:$ chmod +x test.sh 给文件添加执行权限 设置所有用户可读取文件 chmod ugo+r wstest.sh
3、一些注意的点 :
1) 变量 $name 和 ${name} 区别 :在使用上没有任何区别,但加{} 是为了区分变量名的界限 。
2) shell 传递参数:
./test.sh aa 玉枕纱橱
·接收参数的写法:
$0 代表执行的文件名
$1 代表传入的第一个参数
$# 代表传入参数的个数
$* 代表以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
3)shell 数组
./test.sh
·数组写法:
读取数组元素值的一般格式是:${array_name[index]}
读取数组中所有元素:${array_name[@]}
和字符串一样,加#号代表长度
4)shell 基本运算符:
shell 和其他编程语言一样,支持多种运算符。原生的bash 不支持简单的数学运算,但可以通过awk 或 expr 来实现。expr 常用。expr 是一款表达式计算工具,是用它能完成表达式的求值操作。
· 加法 : ./test.sh
·注意:
表达式和运算符之间要有空格,例如 1+1 是不对的,必须写成 1 + 1。
完整的表达式要被 ` ` 包含,注意使用的是 反引号` 而不是单引号 ',在 Esc 键下边。
乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
5)shell 的 echo命令 :用于字符串的输出,格式为 echo string 可以使用echo 完成复杂的输出结果: ·显示转义字符: echo "\" It is a test \" " 结果是 :"It is a test" ·显示换行 :echo -e "OK! \n" # -e 是开启转义
6)test 命令 :用于检查某个条件是否成立,可以从 数值,文件,字符串3个方面检查。 语法为 test 1 -eq 1 代码中的 [] 执行基本的算数运算,注意等号两边不能有空格。
./test.sh
test 的 数值测试:
·test 的字符串测试:
./test.sh
字符串测试:
= 等于则为真 != 不相等则为真 -z 字符串 字符串的长度为零则为真 -n 字符串 字符串的长度不为零则为真
·test 的文件测试:
-e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真
此外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。
测试: ./test.sh
注意:文件需要带后缀。