超详细Shell学习教程第二篇

目录

1.1vim使用简单介绍

1.2控制语句

1.3运算符 

1.3.1算术运算符

1.3.2关系运算符

1.3.3布尔运算符

1.3.4逻辑运算符

1.3.5字符串运算符

1.3.6文件测试运算符


先讲解下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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值