一天学会shell语言,shell教程,shell简单入门,shell中文文档
本片文章将通过8个方面来讲解shell,在编写脚本的时候也可以把他当成是中文文档来查找。这八个方面分别是:1,解释器和执行shell 2,变量 3,参数传递 4,运算符 5,常见命令(echo printf test expr等) 6,流程控制与语法 7,函数 8,文件包含。每一个部分我都会用表格的形式来总结出必要的知识点以便查阅。
一 解释器与执行shell |
|
用法和说明 |
|
解释器 |
#!bin/sh Bourne shell版本 #!bin/bash Bourne Again Shell 版本 |
执行shell |
chomd +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 “./”表示当前目录下 |
二 变量 |
||||
1、基本操作 |
操作 |
用法 |
举例 |
说明 |
1 定义 |
变量名 = 变量值 |
variable_name=”abc” |
无需说明数据类型,如果是数字直接写数字1,1.1等等,如果是字符串用双引号或单引号括起来,如果是数组就用()扩起来。不能用数组开头,不能有空格和标点符号,不能使用关键字。 |
|
2 使用 |
$ variable_name 或${ variable_name } |
$ variable_name ${ variable_name } |
大括号可以帮助解释器识别边界 |
|
3 只读 |
readonly variable_name |
readonly variable_name |
readonly 关键字,使用后无法修改 |
|
4 删除 |
unset variable_name |
unset variable_name |
Unset关键字,使用后变量不能再被引用 |
|
2、字符串 |
1 拼接字符串 |
直接按照变量引用方式引用,不需要加“+”号 |
a = “name” b = “hello ${a}!” |
必须使用{}用来识别边界 |
2 获取字符串长度 |
“#”可以直接获取长度 |
a = “abcd” echo ${#a} |
#符号是shell中用来判断长度的符号,后面你会发先所有和长度有关的都用“#”来判断 |
|
3 查找子字符串 |
Index用来查找子字符串,返回子字符串开始的位置。 |
string = “hello world !” Echo ` expr index “$string” world ` |
“`”是反引号,不是单引号,在tab键上边,expr 关键字是说明将后边的内容当作表达式执行。 |
|
3、数组 |
1 定义 |
用“()”括起来,元素之间用空格隔开 |
array = (val0 val1 val2 … ) |
数组中的元素可以是多种类型,数字,字符串,变量。都可以 |
2 引用 |
还是用$来引用 |
引用某一个元素 ${array[n]} |
n是元素的位置,从0开始 |
|
3 获取所有元素 |
遍历所有元素用@符号 |
${array@]} |
@符号用来遍历所有元素,shell中许多遍历所有内容,都会用@符号 |
|
4 获取数组长度 |
长度获取用# |
length = ${#array[@]} length = ${#array[*]} |
*符号和@用法相似也可以用来表示所有。 |
|
5 获取单个元素长度 |
长度获取用# |
length = ${#array[n]} |
n表示元素位置,从0开始 |
三 参数传递 |
||||
操作 |
用法 |
举例 |
说明 |
|
1、基本用法 |
参数传递 |
Shell可以不需要形参直接传递参数,参数之间用空格隔开 |
$ chmod +x text.sh $ ./text.sh para1 para2 para3 |
参数之间用空格隔开,没有限制想传多少参数传多少 |
1 参数获取 |
$ + 数字 |
Para1 = $ 0 获取第一个参数 |
$+数字直接获取对应位置的参数 |
|
2 参数个数获取 |
$ # |
$ # |
获取传递到脚本的参数个数 |
|
3 遍历参数 |
$ * $ @ |
$ *或$ @ |
将所有参数以一个字符串显示出来 |
|
4 获取当前运行脚本ID |
$ $ |
$ $ |
获取当前运行脚本ID |
|
5 获取后台最后运行脚本的ID |
$ ! |
获取后台最后运行脚本的ID |
||
6 显示选项 |
$ - |
$ - |
显示shell使用的当前选项,与set命令相同 |
|
7 显示推出状态 |
$ ? |
$ ? |
显示最后命令的退出状态,0表示没有错误,其他表示有错误 |
四 运算符 |
||||
操作 |
用法 |
举例 |
说明 |
|
1、expr |
表达式计算工具 |
必须用“·”反引号括起来 |
val=`expr 2+2` |
expr 说明后面的表达式可以用运算符计算结果。 |
2、基本运算符 |
+ - * / % = == != |
与expr一起使用 |
val=`expr 2+2` |
= 赋值 == 等于 |
3、关系运算符 |
1 是否相等 |
-eq |
[ $a -eq $b ] 返回 false |
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 |
2 是否不等 |
-ne |
[ $a -ne $b ] 返回 true |
||
3 是否大于 |
-gt |
[ $a -gt $b ] 返回 false |
||
4 是否小于 |
-lt |
[ $a -lt $b ] 返回 true |
||
5 是否大于等于 |
-ge |
[ $a -ge $b ] 返回 false |
||
6 是否小于等于 |
-le |
[ $a -le $b ] 返回 true |
||
4、布尔运算符 |
1 非 |
! |
[ ! false ] 返回 true |
表达式通常写在 [ ] 中括号内。 |
2 或 |
-o |
[ $a -lt 20 -o $b -gt 100 ] 返回 true |
||
3 与 |
-a |
[ $a -lt 20 -a $b -gt 100 ] 返回 false |
||
5、逻辑运算符 |
1 与 |
&& |
[[ $a -lt 100 && $b -gt 100 ]] 返回 false |
逻辑运算符表达式通常在 [[ ]] 双中括号内。 |
2 或 |
|| |
[[ $a -lt 100 || $b -gt 100 ]] 返回 true |
||
6、字符串运算符 |
1 相等 |
= |
[ $a = $b ] 返回 false |
假定变量 a 为 "abc",变量 b 为 "efg" |
2 不等 |
!= |
[ $a != $b ] 返回 true |
||
3 长度是否为0 |
-z |
[ -z $a ] 返回 false |
||
4 长度是否不为 0 |
-n |
[ -n "$a" ] 返回 true |
||
5 是否为空 |
string直接引用 |
[ $a ] 返回 true |
||
7、文件测试运算符 |
1是否是块设备文件 |
-b file |
[ -b $file ] 返回 false |
file="/var/www/runoob/test.sh",它的大小为100字节,具有 rwx 权限 |
2是否是字符设备文件 |
-c file |
[ -c $file ] 返回 false |
||
3是否是目录 |
-d file |
[ -d $file ] 返回 false |
||
4是否是普通文件(既不是目录,也不是设备文件) |
-f file |
[ -f $file ] 返回 true |
||
5是否设置了 SGID 位 |
-g file |
[ -g $file ] 返回 false |
||
6是否设置了粘着位(Sticky Bit) |
-k file |
[ -k $file ] 返回 false |
||
7是否是有名管道 |
-p file |
[ -p $file ] 返回 false |
||
8是否设置了SUID位 |
-u file |
[ -u $file ] 返回 false |
||
9 是否可读 |
-r file |
[ -r $file ] 返回 true |
||
10是否可写 |
-w file |
[ -w $file ] 返回 true |
||
11是否可执行 |
-x file |
[ -x $file ] 返回 true |
||
12是否为空(文件大小是否大于0) |
-s file |
[ -s $file ] 返回 true |
||
13文件(包括目录)是否存在 |
-e file |
[ -e $file ] 返回 true |
五 常见命令(echo printf test expr) |
||||
操作 |
用法 |
举例 |
说明 |
|
1、echo |
用来显示字符串 |
echo |
-e 开启转义 echo -e “ok! \n” \n 表示换行 Echo -e “ok! \c” \c 表示不换行 |
用于一般的字符串输出 |
2 printf |
用来打印输出 |
printf |
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 |
“-”表示左对齐,没有表示右对齐,10表示字符宽度,s表示显示字符串,4.2f表示4位float数字保留两位小数。 |
3 test |
检查某个条件是否成立 |
test |
If test -e ./bush then echo “文件存在” else echo “文件不存在” fi |
Test和“[ ]”用法相似 |
4 expr |
表达式计算工具 |
expr `表达式` |
a = expr `2+2` |
expr 说明后面的表达式可以用运算符计算结果。 |
六 流程控制和语法 |
||||
操作 |
用法 |
举例 |
说明 |
|
1 If |
If语句 |
If condition Then command1 fi |
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi |
Shell的流程控制通常会有结束语句,一般为倒写关键字 |
If else语句 |
If condition Then command1 else command2 fi |
|||
If elif else |
if condition1 then command1 elif condition2 then command2 else commandN fi |
|||
2 for |
for in do done |
for var in item1 item2 ... itemN do command1 command2 ... commandN done |
for loop in 1 2 3 4 5 do echo "The value is: $loop" done |
关键字in代表循环条件,同样也有结束语句关键字done |
3 while |
while do down |
while condition do command done |
int=1 while(( $int<=5 )) do echo $int let "int++" done |
While 后面条件为空 while : 或者条件为true时 while true |
4 until |
until do done |
until condition do command done |
a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done |
until 也是循环控制语句,不过条件返回为true时才停止循环 |
5 case |
case in 模式1) 模式2) esac |
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN; esac |
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' 2) echo '你选择了 2' 3) echo '你选择了 3' 4) echo '你选择了 4' *) echo '你没有输入 1 到 4 之间的数字'; esac |
取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。 |
6 break |
跳出所有循环,终止后面所有的操作。 |
break |
while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!"; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done |
break,从这里开始中止后边所有的循环操作。 |
7 continue |
跳出本次循环,进入下一个循环条件 |
continue |
while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done |
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环 |
七 函数 |
||||
1 函数 |
[function] funname [()] { action; [return int;] } “[ ]”方括号中的是可选选项,可以写也可以不写。如果不加return 函数还是会返回最后一条的命令结果的。 |
[function] funname [()] { action; [return int;] |
demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----" |
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255 |
八 文件包含 |
||||
1 文件包含 |
. filename # 注意点号(.)和文件名中间有一空格 或 source filename |
. filename source filename |
#使用 . 号来引用test1.sh 文件 . ./test1.sh # 或者使用以下包含文件代码 # source ./test1.sh |
和java引入类,python导入模块差不多。Shell也可以引入文件直接使用被引入文件中的变量和函数。 |
shell其实也就这八大知识点吧,我觉得。文章中也可能有错误或者不妥的地方欢迎留言指出,另外不同的人可能有不同的见解,也有可能是六个知识点,十个知识点,但这篇文章只是自己总结的看法。
一天学会shell语言,shell教程,shell简单入门,shell中文文档相关推荐
- Swift语言教程中文文档
Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...
- Mitmproxy/mitmdump中文文档以及配置教程
目录 目录 Introduction Features Installation Run Scripts Events 本文是一个较为完整的mitmproxy教程,侧重于介绍如何开发拦截脚本,帮助读者 ...
- python语言需要英语非常好吗-Python用不好英语水平不够?这里有官方中文文档你看不看...
Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...
- 官方中文文档上线了!Python各种教程已汉化。
终于,Python有官方中文文档了. 从今往后,不论是版本新变化,入门教程,语法讲解,Python模块安装指南--各种各样的手册,都可以直接看中文了. 你看,比起英文原版,中文的语气好像更加鸡冻一些: ...
- python中文语法提示_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...
终于,Python有官方中文文档了. 从今往后,不论是版本新变化,入门教程,语法讲解,Python模块安装指南--各种各样的手册,都可以直接看中文了. △ 不是谷歌翻译哟 你看,比起英文原版,中文的语 ...
- React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念
React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 React 入门系列教程导航 React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 Rea ...
- C语言中文文档、C语言文档大全(网址)
中文文档 C语言标准库中文文档 英文文档 cppreference.com 注意:打开网页后滑最下面才是C 微软的C语言文档 C 文档 - 入门.教程.参考. | Microsoft Learn IE ...
- 284页beego官方中文文档,Go语言进阶必备
Go语言作为出身名门的后起之秀,大家所熟知的Docker和Kubernets(K8S)就是使用Go语言开发的,以其简单高效.高并发.跨平台的优势,称霸于容器领域. 根据 Stack Overflow ...
- 1563页Go语言中文文档,涵盖Go语言所有核心知识点,限时免费下载!
Go 语言有多火爆?国外如 Google.AWS.Cloudflare.CoreOS 等,国内如七牛.阿里等都已经开始大规模使用 Go 语言开发其云计算相关产品. Go 语言的语法很简单,很容易掌握. ...
最新文章
- 通过Appium获取Android app中webview
- 设置php-fpm使用socket文件
- vip能ping通,但80不通的解决方法
- golang基本数据类型默认值
- Java Script中常见操作
- 【struts2】struts2实现自定义数据类型转换器
- Java十进制转换为二进制的无符号数
- 你想让自己的产品像病毒一样疯传吗
- 安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?
- 2022官网下载jdk8教程
- Linux查找启动的隐藏服务,Linux服务器入侵检测排查方法
- 【渝粤教育】电大中专中成药 (2)作业 题库
- musiclink-v1.9 一款php源码的音乐外链程序,musiclink-v1.9 一款PHP源码的音乐外链程序 - 下载 - 搜珍网...
- 关于异业联盟和O2O商业模式的一些想法
- UFR II、PCL、PostScript打印机驱动区别
- 如何经营咖啡加盟店和独立咖啡店?用好国外成功经营咖啡馆四大法则
- 人脸识别之人脸对齐(三)--AAM算法
- CSS实现横向图片滚动播放
- springboot打成jar后获取resources下文件失败, cannot be resolved to absolute file path because it does not resid
- Atitit 职业资格证书分类等级 目录 1. 等级 :初级(五级)、中级(四级)、高级(三级)、技师(二级)和高级技师(一级)。	1 2. 折叠分类	2 2.1. 生产、运输设备操作人员	2 2
热门文章
- 6-6 调查 :在6.3.1节编写的程序favorite_languages.py中执行以下操作
- SON_EXAM考试php,螃蟹学PHP设计模式之模板模式
- 【leetcode-Python】-找数学规律-LCP 29. 乐团站位
- 推销信乐团演唱会的文案
- 中国福马机械集团容灾备份系统采购
- 微型计算机原理实验,微机原理实验报告.pdf
- 招聘网站爬虫及可视化分析
- 远程桌面连接不可用解决方法
- 30岁前如何投资自己
- CPSE2021 西部数据持续推动智慧视频行业发展 应对更严苛的数据流要求