超详细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 ==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学习教程第二篇相关推荐
- [转](转载+整理)超详细的cmake教程
cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...
- (转载+整理)超详细的cmake教程
cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...
- 超强、超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...
- 【转】超强、超详细Redis入门教程 ,建议收藏
转载自: 这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3. ...
- 超详细的 PyCharm 教程
本文假设读者熟悉 Python 开发,且计算机中已安装某个版本的 Python.该教程将使用 Python 3.6 版本,屏幕截图和 demo 均来自 macOS 系统.由于 PyCharm 可在所有 ...
- mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程
这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下 一.下载SQL Server 2008 R2安装文件 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者 ...
- MVC教程第二篇:第一个页面
MVC教程第二篇:第一个页面 摘要 本文首先一步一步完成Demo的第一个页面--首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在, ...
- (超详细的新手教程)怎么下载JDK包?
一.打开百度,搜索 " JDK " 选择 " java development kit (jdk) ",点击进去 二.找到 " JDK "包 ...
- 【STM32】标准库与HAL库对照学习教程外设篇--红外避障传感器
[STM32]标准库与HAL库对照学习教程外设篇--红外避障传感器 一.前言 二.准备工作 三.红外避障传感器 1.传感器原理说明 2.传感器特性 四.标准库使用红外传感器 1.实验程序 2.实验效果 ...
最新文章
- 2022-2028年中国胶片手套行业市场研究及前瞻分析报告
- python 正则表达式 前瞻_正则表达式 For Python
- linux管理子进程c,Linux 进程管理 CGroup
- [中英对照]How PCI Works | PCI工作原理
- mse函数(均方误差函数)
- html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
- linux3.4 内核裁剪,05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁...
- axure中出现小手_你所不知道的15个Axure使用技巧
- c语言与64位windows不兼容_微软发布可模拟 64 位 x86 程序的 ARM 版 Windows 10
- 点击按钮无法触发ajax_前端 | Ajax 入门与实战
- 如何为prel语言加载模块_WebAssembly 系列(第四部分)- 创建和使用WebAssembly模块...
- 用C#把文件转换为XML
- numpy 维度与轴的问题
- [转载] java中final,finally,finalize三者的作用和区别
- 5.应用测试 5.1测试Spring MVC的控制器
- linux的dd命令与cp,dd命令中seek和skip的用法-Linux下挂载 windows 共享的命令-学习history命令的使用方法_169IT.COM...
- iOS14.7 验证失败,因为您不再连接到互联网
- Robotic KDL library
- 什么是对称加密(对称加密简介)
- 头歌 初识MongoDB
热门文章
- Failed to execute tools\android.bat:分分钟解决!网上千篇一律,解决不了?看看这篇!
- repo下载安卓源码记录
- 谜底是计算机的谜语英语,有关计算机的谜语
- 04.奇特的一生(笔记)
- 滴滴程序员被亲戚鄙视:年薪八十万还不如二本教书的...
- 如何找到一个网站的icon
- LeetCode 每日一题 3. 无重复字符的最长子串
- Redisson实现分布式锁原理
- python正则表达式试题_正则表达式练习题
- JAVA SE之面向对象12:集合3(Set)