一天学会shell语言,shell教程,shell简单入门,shell中文文档

    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其实也就这八大知识点吧,我觉得。文章中也可能有错误或者不妥的地方欢迎留言指出,另外不同的人可能有不同的见解,也有可能是六个知识点,十个知识点,但这篇文章只是自己总结的看法。 吐舌头
  • 35
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值