shell语言是一门linux系统下的工具语言,主要用于写一些linux系统下的操作命令,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。或者直接理解为shell命令是可以执行多个linux命令的脚本。
    shell并不复杂,有编程基础的话,简单入门两三个小时就可以入门,可以尝试把目前一些重复操作的linux命令写成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中文文档相关推荐

  1. Swift语言教程中文文档

    Swift语言教程中文文档 Swift语言教程(一)基础数据类型 Swift语言教程(二)基础数据类型 Swift语言教程(三)集合类型 Swift语言教程(四) 集合类型 Swift语言教程(五)控 ...

  2. Mitmproxy/mitmdump中文文档以及配置教程

    目录 目录 Introduction Features Installation Run Scripts Events 本文是一个较为完整的mitmproxy教程,侧重于介绍如何开发拦截脚本,帮助读者 ...

  3. python语言需要英语非常好吗-Python用不好英语水平不够?这里有官方中文文档你看不看...

    Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...

  4. 官方中文文档上线了!Python各种教程已汉化。

    终于,Python有官方中文文档了. 从今往后,不论是版本新变化,入门教程,语法讲解,Python模块安装指南--各种各样的手册,都可以直接看中文了. 你看,比起英文原版,中文的语气好像更加鸡冻一些: ...

  5. python中文语法提示_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...

    终于,Python有官方中文文档了. 从今往后,不论是版本新变化,入门教程,语法讲解,Python模块安装指南--各种各样的手册,都可以直接看中文了. △ 不是谷歌翻译哟 你看,比起英文原版,中文的语 ...

  6. React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念

    React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 React 入门系列教程导航 React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 Rea ...

  7. C语言中文文档、C语言文档大全(网址)

    中文文档 C语言标准库中文文档 英文文档 cppreference.com 注意:打开网页后滑最下面才是C 微软的C语言文档 C 文档 - 入门.教程.参考. | Microsoft Learn IE ...

  8. 284页beego官方中文文档,Go语言进阶必备

    Go语言作为出身名门的后起之秀,大家所熟知的Docker和Kubernets(K8S)就是使用Go语言开发的,以其简单高效.高并发.跨平台的优势,称霸于容器领域. 根据 Stack Overflow ...

  9. 1563页Go语言中文文档,涵盖Go语言所有核心知识点,限时免费下载!

    Go 语言有多火爆?国外如 Google.AWS.Cloudflare.CoreOS 等,国内如七牛.阿里等都已经开始大规模使用 Go 语言开发其云计算相关产品. Go 语言的语法很简单,很容易掌握. ...

最新文章

  1. 通过Appium获取Android app中webview
  2. 设置php-fpm使用socket文件
  3. vip能ping通,但80不通的解决方法
  4. golang基本数据类型默认值
  5. Java Script中常见操作
  6. 【struts2】struts2实现自定义数据类型转换器
  7. Java十进制转换为二进制的无符号数
  8. 你想让自己的产品像病毒一样疯传吗
  9. 安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?
  10. 2022官网下载jdk8教程
  11. Linux查找启动的隐藏服务,Linux服务器入侵检测排查方法
  12. 【渝粤教育】电大中专中成药 (2)作业 题库
  13. musiclink-v1.9 一款php源码的音乐外链程序,musiclink-v1.9 一款PHP源码的音乐外链程序 - 下载 - 搜珍网...
  14. 关于异业联盟和O2O商业模式的一些想法
  15. UFR II、PCL、PostScript打印机驱动区别
  16. 如何经营咖啡加盟店和独立咖啡店?用好国外成功经营咖啡馆四大法则
  17. 人脸识别之人脸对齐(三)--AAM算法
  18. CSS实现横向图片滚动播放
  19. springboot打成jar后获取resources下文件失败, cannot be resolved to absolute file path because it does not resid
  20. Atitit 职业资格证书分类等级 目录 1. 等级 :初级(五级)、中级(四级)、高级(三级)、技师(二级)和高级技师(一级)。 1 2. 折叠分类 2 2.1. 生产、运输设备操作人员 2 2

热门文章

  1. 6-6 调查 :在6.3.1节编写的程序favorite_languages.py中执行以下操作
  2. SON_EXAM考试php,螃蟹学PHP设计模式之模板模式
  3. 【leetcode-Python】-找数学规律-LCP 29. 乐团站位
  4. 推销信乐团演唱会的文案
  5. 中国福马机械集团容灾备份系统采购
  6. 微型计算机原理实验,微机原理实验报告.pdf
  7. 招聘网站爬虫及可视化分析
  8. 远程桌面连接不可用解决方法
  9. 30岁前如何投资自己
  10. CPSE2021 西部数据持续推动智慧视频行业发展 应对更严苛的数据流要求