目录

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 ==numroot@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]
thenecho '两个数字相等!'
elseecho '两个数字不相等!'
firoot@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
testroot@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,5root@ubuntu:/home/lulu/Desktop/Test# for f in * ;do echo $f; if [ -d $f ];then break;fi;done;
1
grep.txt
OpenSedroot@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.5root@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]
thenecho '两个数相等!'
elseecho '两个数不相等!'
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 ]
thenecho "a 等于 b"
fi
if [ $a != $b ]
thenecho "a 不等于 b"
fi
if [ $a -eq $b ]
then echo "$a -eq $b"
fiif [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
thenecho "$a 小于 100 且 $b 大于 15 : 返回 true"
elseecho "$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
thenecho '两个字符串相等!'
elseecho '两个字符串不相等!'
fi
if test -n $num1;then echo '$num 长度不为0'
else echo "$num 为空"
fi
if test -z $num1
thenecho '$num1 长度为0'
elseecho '$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=2b=3var1=3echo '测试函数'if [ -f "bintest" ];then touch bintestelif [ -x "/bin/ls" ];then echo "存在/bin/ls"else echo "ls"fiif [ -n "$var1" ];then echo "$var 存在值"else echo "ls"fiif  [ $a==$b ];then echo "$a==$b"else echo '函数结束'fi
}
functionTest
#传入参数 要求是两个参数
if [ ! $# -eq 2  ];thenecho param error! 参数不为两个exit 1
fi
# 判断目录是不是已经存在,如果不存在则创建,存在则输出“dir exist”
dirname=$1
dirname1=$2
#判断是否目录存在
if [ ! -d $dirname  ];thenmkdir $dirname
elif [ ! -d $dirname1  ];thenecho " $dirname 存在 不创建 "mkdir $dirname1
elseecho $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
Hallohe
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 $qroot@ubuntu:/home/lulu/Desktop/Test# (q=1;echo $q);echo $q
1root@ubuntu:/home/lulu/Desktop/Test# { q=1;echo $q; };echo $q
1
1

Test测试讲解:

if test -e ./notFile -o -e ./bash
thenecho '至少有一个文件存在!'
elseecho '两个文件都不存在'
fi

超详细Shell学习教程第二篇相关推荐

  1. [转](转载+整理)超详细的cmake教程

    cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...

  2. (转载+整理)超详细的cmake教程

    cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...

  3. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  4. 【转】超强、超详细Redis入门教程 ,建议收藏

    转载自: 这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3. ...

  5. 超详细的 PyCharm 教程

    本文假设读者熟悉 Python 开发,且计算机中已安装某个版本的 Python.该教程将使用 Python 3.6 版本,屏幕截图和 demo 均来自 macOS 系统.由于 PyCharm 可在所有 ...

  6. mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程

    这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下 一.下载SQL Server 2008 R2安装文件 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者 ...

  7. MVC教程第二篇:第一个页面

    MVC教程第二篇:第一个页面     摘要 本文首先一步一步完成Demo的第一个页面--首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在, ...

  8. (超详细的新手教程)怎么下载JDK包?

    一.打开百度,搜索 " JDK " 选择 " java development kit (jdk) ",点击进去 二.找到 " JDK "包 ...

  9. 【STM32】标准库与HAL库对照学习教程外设篇--红外避障传感器

    [STM32]标准库与HAL库对照学习教程外设篇--红外避障传感器 一.前言 二.准备工作 三.红外避障传感器 1.传感器原理说明 2.传感器特性 四.标准库使用红外传感器 1.实验程序 2.实验效果 ...

最新文章

  1. 2022-2028年中国胶片手套行业市场研究及前瞻分析报告
  2. python 正则表达式 前瞻_正则表达式 For Python
  3. linux管理子进程c,Linux 进程管理 CGroup
  4. [中英对照]How PCI Works | PCI工作原理
  5. mse函数(均方误差函数)
  6. html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
  7. linux3.4 内核裁剪,05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁...
  8. axure中出现小手_你所不知道的15个Axure使用技巧
  9. c语言与64位windows不兼容_微软发布可模拟 64 位 x86 程序的 ARM 版 Windows 10
  10. 点击按钮无法触发ajax_前端 | Ajax 入门与实战
  11. 如何为prel语言加载模块_WebAssembly 系列(第四部分)- 创建和使用WebAssembly模块...
  12. 用C#把文件转换为XML
  13. numpy 维度与轴的问题
  14. [转载] java中final,finally,finalize三者的作用和区别
  15. 5.应用测试 5.1测试Spring MVC的控制器
  16. linux的dd命令与cp,dd命令中seek和skip的用法-Linux下挂载 windows 共享的命令-学习history命令的使用方法_169IT.COM...
  17. iOS14.7 验证失败,因为您不再连接到互联网
  18. Robotic KDL library
  19. 什么是对称加密(对称加密简介)
  20. 头歌 初识MongoDB

热门文章

  1. Failed to execute tools\android.bat:分分钟解决!网上千篇一律,解决不了?看看这篇!
  2. repo下载安卓源码记录
  3. 谜底是计算机的谜语英语,有关计算机的谜语
  4. 04.奇特的一生(笔记)
  5. 滴滴程序员被亲戚鄙视:年薪八十万还不如二本教书的...
  6. 如何找到一个网站的icon
  7. LeetCode 每日一题 3. 无重复字符的最长子串
  8. Redisson实现分布式锁原理
  9. python正则表达式试题_正则表达式练习题
  10. JAVA SE之面向对象12:集合3(Set)