目录
先讲解下vim的使用,在windows系统下学习shell需要下载工具Cygwin,Cygwin下载地址Cygwin
也可以直接使用git bash来学,git下载学习参考 Git学习教程
1.1vim使用简单介绍
vim使用:
安装:
sudo apt-get install vim
三种状态:
vim 编辑器可以简单分为“命令控制模式” 和 “文本编辑模式”
“:w” 表示保存该文件,但不退出编辑器
“:w!” 表示强制保存该文件,不退出编辑器
“:wq” 表示保存文件并退出vim编辑器
“:wq!” 表示强制保存文件并退出vim编辑器
直接输入vim test 如果test不存在会自己创建
从命令控制模式到 文本编辑:
a i o
i是插入
a是附加
o直接换行插入文件
从文本编辑到命令控制 Esc
在英文模式输入:wq退出
插入模式:
命令行模式:
保存退出:
1.2控制语句
if elif else 注意[ $num == $num2 ]前后之前空格,否则会出错 在shell 里 如果else分支没有语句执行,就不要写这个else。
root@ubuntu:/home/lulu/Desktop/Test# num=$[2*3]
root@ubuntu:/home/lulu/Desktop/Test# num2=$[1+5]
root@ubuntu:/home/lulu/Desktop/Test# if [ $num == $num2 ];then echo "num ==num";elif [ $num -gt $num2 ];then echo "num>num2";elif [ $num -lt $num2 ];then echo "num<num2";else echo "没有符合的条件";fi
num ==num
root@ubuntu:/home/lulu/Desktop/Test# if test $[num] -eq $[num2] ;then echo "num=num1" ; else echo "num !=num2";fi
num=num1
创建一个脚本
vim test.sh
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
root@ubuntu:/home/lulu/Desktop/Test# chmod +x test.sh
root@ubuntu:/home/lulu/Desktop/Test# ./test.sh
两个数字相等!
for语句:
root@ubuntu:/home/lulu/Desktop/Test# for x in `ls`;do echo $x;done
grep.txt
OpenSed
Psed
sed
Sed
sed.txt
students_store
test
root@ubuntu:/home/lulu/Desktop/Test# a=(1,2,3,4,5)
root@ubuntu:/home/lulu/Desktop/Test# for i in ${a[*]} ;do echo "$i";done
1,2,3,4,5
root@ubuntu:/home/lulu/Desktop/Test# for f in * ;do echo $f; if [ -d $f ];then break;fi;done;
1
grep.txt
OpenSed
root@ubuntu:/home/lulu/Desktop/Test# for f in * ;do echo $f; if [ -f $f ];then echo $f is file ; else continue; fi ; done;
1
1 is file
grep.txt
grep.txt is file
OpenSed
Psed
sed
sed is file
Sed
Sed is file
sed.txt
sed.txt is file
students_store
students_store is file
test
test is file
test.sh
test.sh is file
while循环
root@ubuntu:/home/lulu/Desktop/Test# i=1
root@ubuntu:/home/lulu/Desktop/Test# while (($i<=5));do echo $i; let "i++";done
1,2,3,4,5
1.3运算符
具体可参照:菜鸟教程
1.3.1算术运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
root@ubuntu:/home/lulu/Desktop# a=10
root@ubuntu:/home/lulu/Desktop# b=20
root@ubuntu:/home/lulu/Desktop# echo $((a+b))
30
root@ubuntu:/home/lulu/Desktop# echo $((a-b))
-10
root@ubuntu:/home/lulu/Desktop# echo $((a*b))
200
root@ubuntu:/home/lulu/Desktop# echo $((a/b))
0
root@ubuntu:/home/lulu/Desktop# echo $((a%b))
10
root@ubuntu:/home/lulu/Desktop# awk 'BEGIN {print 10/20 }'
0.5
root@ubuntu:/home/lulu/Desktop# echo $[ $a!=$b ]
1
root@ubuntu:/home/lulu/Desktop# echo $[ a==b ]
0
1.3.2关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
root@ubuntu:/home/lulu/Desktop# [ 3 -le 3 ];echo $?
0
root@ubuntu:/home/lulu/Desktop# [ 3 -eq 3 ];echo $?
0
root@ubuntu:/home/lulu/Desktop# [ 3 -le 2 ];echo $?
1
root@ubuntu:/home/lulu/Desktop# [ 3 -le 4 ];echo $?
0
root@ubuntu:/home/lulu/Desktop# [ 3 -le 4 -a 3 -ge 4 ];echo $?
1
root@ubuntu:/home/lulu/Desktop# [ 3 -le 4 -o 3 -ge 4 ];echo $?
0
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
1.3.3布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
#!/bin/bash
# author:少年鹿
a=10
b=10
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
if [ $a -eq $b ]
then
echo "$a -eq $b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
执行:
root@ubuntu:/home/lulu/Desktop/Test# chmod +x 测试加减.sh
root@ubuntu:/home/lulu/Desktop/Test# sh 测试加减.sh
a + b : 20
a - b : 0
a * b : 100
b / a : 1
b % a : 0
测试加减.sh: 20: [: 10: unexpected operator
10 -eq 10
10 == 10: a 等于 b
10 小于 100 且 10 大于 15 : 返回 false
1.3.4逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
1.3.5字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":
代码中的 [] 执行基本的算数运算,如:
#!/bin/bash
a=5
b=5
result=$[a+b]
echo "result 为: $result"
root@ubuntu:/home/lulu/Documents# ./testculm.sh
result 为: 10
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
if test -n $num1;then echo '$num 长度不为0'
else echo "$num 为空"
fi
if test -z $num1
then
echo '$num1 长度为0'
else
echo '$num1 长度不为0'
fi
root@ubuntu:/home/lulu/Documents# ./teststring.sh
两个字符串不相等!
$num 长度不为0
$num1 长度不为0
1.3.6文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下
其他检查符:
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。
#!/bin/bash
functionTest(){
a=2
b=3
var1=3
echo '测试函数'
if [ -f "bintest" ];then touch bintest
elif [ -x "/bin/ls" ];then echo "存在/bin/ls"
else echo "ls"
fi
if [ -n "$var1" ];then echo "$var 存在值"
else echo "ls"
fi
if [ $a==$b ];then echo "$a==$b"
else echo '函数结束'
fi
}
functionTest
#传入参数 要求是两个参数
if [ ! $# -eq 2 ];then
echo param error! 参数不为两个
exit 1
fi
# 判断目录是不是已经存在,如果不存在则创建,存在则输出“dir exist”
dirname=$1
dirname1=$2
#判断是否目录存在
if [ ! -d $dirname ];then
mkdir $dirname
elif [ ! -d $dirname1 ];then
echo " $dirname 存在 不创建 "
mkdir $dirname1
else
echo $dirname1 exist
echo $dirname exist
fi
定向输入输出<输入,>输出 ,>>附加输出
root@ubuntu:/home/lulu/Desktop/Test# while read x;do echo $x ; done < grep.txt
Hello World
Hello Insert
Hello p
E
World
good
123334
46*&
%
HAllo
Hallo
he
god
good
gooooood
read读取字符
root@ubuntu:/home/lulu/Desktop/Test# read a;echo $a
11
11
-p为提示话语
root@ubuntu:/home/lulu/Desktop/Test# read -p "Enter :" a ;echo $a
Enter :122
122
括号作用范围
root@ubuntu:/home/lulu/Desktop/Test# (q=1)
root@ubuntu:/home/lulu/Desktop/Test# echo $q
root@ubuntu:/home/lulu/Desktop/Test# (q=1;echo $q);echo $q
1
root@ubuntu:/home/lulu/Desktop/Test# { q=1;echo $q; };echo $q
1
1
Test测试讲解:
if test -e ./notFile -o -e ./bash
then
echo '至少有一个文件存在!'
else
echo '两个文件都不存在'
fi