vim操作
- a:光标右侧插入字符
- A:行尾插入字符
- i:光标左侧插入字符
- I:行首插入字符
- o:下方新增一行插入字符
- O:上方新增一行插入字符
- 0:移至行首
- $:移至行尾
- w:下一个单词
- x:删除一个字符(n+x:删除n个字符)
- dd:删除一行(n+dd:删除n行)
- y:复制光标字符
- yw:复制光标到行尾字符
- yy:复制一行(n+yy:复制n行)
- p:粘贴
- u:撤销一步
- /+内容:光标位置向下查找内容
- ?+内容:光标位置向上查找内容
- n:下一个查找结果
- set nu:显示行号
Shell编程
Shell基本结构
shell脚本头部以“#!“开头指定shell脚本的运行环境,一般为#!/bin/bash
Shell调用外部脚本
在Shell脚本中可以调用其他已经写好的Shell脚本,有两种调用方法
. 脚本文件名
source 脚本文件名
变量操作
- 变量定义:
变量名=值
- 变量访问:
$变量名
- 删除变量:
unset 变量名
- 添加环境变量:
export 变量名=值
(Shell脚本结束,环境变量消失,需要永久生效编辑/etc/profile)
内部变量
- $0:当前脚本文件名字
- $n:传递给脚本的第n个参数
- $#:传递的参数个数
- $*:传递的全部参数
- $$:当前Shell脚本的进程ID
输出命令
-
echo:简单的标准输出
mouth=4 echo "2015-${mouth}-10"
-
printf:格式化输出
printf "%d %s\n" 100 "abc"
变量的读取输入
read -p "请输入两个数字" v1 v2
变量替换
变量替换是指,根据变量的一些状态来改变它的值
- ${var:-word}:如果变量var为空或已删除,则返回word,不修改var
- ${var:=word}:如果变量var为空或已删除,则返回word,并将var设置为word
- ${var:?message}:如果变量var为空或已删除,则将消息message发送到标准错误输出
- ${var:+word}:如果变量var被定义,则返回word,不改变var的值
数组的使用
数组的定义方式
数组名=(值1 值2 ... 值n)
数组名[n]=值n
数组的操作
- 读取数组:${数组名[下标]}
- 读取元素个数:${#数组名[@]}
- 读取单个元素长度:${#数组名[n]}
表达式
-
算术表达式
val=$[5+3]
let val=$n+$m
-
逻辑表达式:[ 逻辑表达式 ],只需要一个中括号空格隔开,返回true,false
-
整数关系运算符
- -eq:相等
- -ne:不等于
- -gt:大于
- -lt:小于
- -ge:大于等于
- -le:小于等于
-
字符串检测运算符
-
-z:检测是否长度为0,为0返回true
a="abc" if [ -z $a ] then echo "长度为0" else echo "长度不为0" fi
-
-n:同样检测长度是否为0,只是如果为0返回false
-
不加运算符,直接放字符串,判断的是字符串是否为空,不为空返回true
-
-
与或运算
- 与:
表达式 -a 表达式
- 或:
表达式 -o 表达式
- 与:
条件语句
-
if语句
if [ 表达式 ] … then … elif [ 表达式 ] … then … else … fi
a=1 b=2 if [ $a == $b ] then echo "a等于b" elif [ $a > $b ] then echo "a大于b" else echo "a小于等于b" fi
-
case语句
case 值 in
模式1)
语句1
;;
模式2)
语句2
;;
…
模式n)
语句n
;;
*) #这个表示任意模式,类似default
语句*
esac
case $USER in teacher) echo "欢迎老师" ;; stu1 | stu2) echo "欢迎同学" ;; root) echo "欢迎管理员" ;; *) echo "欢迎$USER" esac
循环结构
-
while [ 表达式 ] do … done
num=0 while [ $num -lt 100 ] do num=$[$num+1] echo "num=$num" done
-
until [ 表达式 ] do … done
num=0 until [ $num -ge 100 ] do num=$[$num+1] echo "num=$num" done
-
for 变量 in 列表 do … done
for val in 1 2 3 4 5 do echo $val done
-
break [n]:跳出n层循环,默认是1
-
continue [n]:跳出n层循环,默认是1
-
exit [n]:结束Shell脚本,退出值为n,默认为最后一个指令执行状态
函数
[function] 函数名()
{
命令序列
[return 返回值]
}
[]包含的内容表示可缺省
调用:
- 直接函数名 参数1 参数2 … 参数n,内部调用参数时,用$n来表示
- 获取返回值:先调用函数,用#?接收
a=2
b=3
function addNum(){
printf "%d %d" $1 $2
local val=$[$1+$2]
return $val
}
addNum $a $b
val=$?
echo "$val"
{
命令序列
[return 返回值]
}
[]包含的内容表示可缺省
调用:
- 直接函数名 参数1 参数2 … 参数n,内部调用参数时,用$n来表示
- 获取返回值:先调用函数,用#?接收
a=2
b=3
function addNum(){
printf "%d %d" $1 $2
local val=$[$1+$2]
return $val
}
addNum $a $b
val=$?
echo "$val"