前言
shell编程就是将一些shell命令(shell编程中一定有shell命令)进行组合使用通过一部分的shell循环控制语句(shell编程中不一定要用到循环控制语句),主要目的是通过shell脚本达到需求;有输入(不一定有)--->处理(一定有)--->输出(不一定有)。
目录
一、vi编辑器快捷键记录
1、vi中快速复制粘贴(yy)
例:复制4行
4yy 然后把光标(不是鼠标)移动到需要粘贴的位置,按一下p键
2、粘贴(p)
p:粘贴到光标后面的位置
P:粘贴到光标前面的位置
3、剪切
x 剪切当前字符
nx:剪切多个字符
4、删除多行(dd)
dd:快速删除一行
例:删除4行
4dd 删除光标(包括光标所在行)
5、撤销(u)与恢复(ctrl+r)
u 撤销一步操作
6、到第一个(gg)
7、到最后一行(ctrl + g)
8、定位到第n行
例:定位到第8行
:8
9、vi编辑器中查找(/)
例:在vi中查找字母a
/a
n:下一个字母
N:上一个字母
二、shell编程
(一)、shell变量
1、本地变量
例1:创建变量
name =zs
例2:打印变量(引用变量)
echo $name (echo${name})
例3:移除变量 unset name
2、环境变量
注:所有的环境变量都需要配置到/etc/profile中
创建环境变量
export shell=a.sh
PATH=$PATH:$a.sh
生效:
source /etc/profile
3、局部变量
创建在函数体中的变量
在函数a中创建一个局部变量
function a(){
local name=ls
echo name
}
调用函数
例:调用函数a
a
4、位置变量
将shell脚本外的参数传入到shell脚本中。在shell脚本内定义
即:向shell脚本中传递参数采用位置变量,向函数中传入参数也是采用位置变量
$0:执行脚本的命令本身(包含传入的参数)
$1:第一个参数
$2:第二个参数
例1(向shell脚本中传递参数):执行脚本 a.sh传入参数1,2,3
echo $0
echo $1
echo $2
echo $3
#以上为a.sh的内容
执行语句为:/test/a.sh 1,2,3
$0输出为:/test/a.sh(当执行语句为./a.sh 1,2,3 时:$0输出为:./a.sh)
$1输出为:1
$2输出为:2
$3输出为:3
例2(向function 函数中传递参数):调用函数a 传入参数为a ,b,c
function a(){
echo $0
echo $1
echo $2
echo $3
}
a a b c
#以上为a.sh的内容
执行shell脚本语句为:/test/a.sh 1,2,3
执行function函数语句为:a a b c
$0输出为:/test/a.sh
$1输出为:a
$2输出为:b
$3输出为:c
5、特殊变量
$?:接收上一条命令的返回状态码,状态码在0-255之间
$#:获取参数个数
$*:获取所有的参数值
$$:获取当前shell进程号(PID)
(二)、shell函数
1、函数定义
function 函数名 () {
函数内容
return 0-255之间 注:为返回值固定写法
}
例:创建一个函数名为test的函数 返回值为100
function test(){
echo $0
echo $1
echo $2
return 100
}
2、函数调用函数,并获取函数值
函数名 参数1 参数2
例:调用test()函数传入参数为1 、2、3,并获取函数的返回值(也叫状态码)
function test(){
echo $0
echo $1
echo $2
return 100
}
test 1 2 3
echo $?
(三)、shell循环
单引号和双引号的区别:
单引号里面不能引用变量(当单引号引入变量时,会原样输出,不会输出变量值,即引用变量无效),双引号中会引用变量的值
常用的for循环
1、for循环打印1-10
for ((i=10;i<10;i++ ))
do
echo $i
down
2、for循环打印1-9
for i in {0..9}
do
echo $i
done
3、while循环打印三角
j=1
x=1while [ $j -le 5 ]
do
while [ $x -le $j ]
do
echo -n "* "
let x++
done
x=0
echolet j++
done
4、
num1=1
num2=1if [ $num1 = $num2 ]
then echo '相等'
fi
打印:相等
num1=0
num2=1if [ $num1 = $num2 ]
then echo '相等'else echo '不相等'
fi
打印:不相等
num03=3
if [ $num03 = 1 ]
then echo '等于1'
elif [ $num03 = 2 ]
then echo '等于2'
elif [ $num03 = 3 ]
then echo '等于3'
else echo '相等4'
fi
打印:等于3
(四)、其他
1、> 和 >>
echo "覆盖到文件" > log1.txt 每次覆盖整个文件
echo "末尾追加到文件" >>log2.txt 追加到文件末尾