Linux操作系统-shell程序设计最全版本(含运行截图)

Shell程序设计

(一)Shell简介

主要功能:命令解释程序/作为一种高级程序实际语言。

(1)查看当前系统支持的Shell

主文件夹——其他位置——计算机——etc——passwd

cat /etc/shells

head /etc/shells

more /etc/shells

例如tcsh --version查看显示的Shell版本

 Linux操作系统-shell程序设计最全版本(含运行截图)_第1张图片

(2)Shell脚本的建立与执行

脚本的建立

vi编辑器或cat

利用vi编辑器进行录入

vi 脚本名

录入

ls -l

cal

who

查看

cat 脚本名

shell脚本的执行

 Linux操作系统-shell程序设计最全版本(含运行截图)_第2张图片

输入定向的执行方式

sh <脚本名

以脚本名作为shell参数的执行方式

sh 脚本名 【参数】或 sh 脚本名

修改执行权限后直接执行方式

(1)利用chmod命令

u代表该档案的拥有者

g代表与该档案拥有着同属于同一个群体者

o 代表其他以外的人

a 代表这三者皆是

+代表增加权限

-代表取消权限

=代表唯一设定权限

r代表可读取

w代表可写入

x代表可执行

./脚本名(前面有一个点)

(2)cp 脚本名/bin

脚本名

(二)Shell的变量

变量名:字母,数字,下划线

Shell环境变量和shell用户自定义变量

(1)环境变量

u可写的shell环境变量

一般都是大写的

PWD  当前工作目录的名称

HOME 用户初次登录时起的起始目录名

……

利用echo显示执行

echo 显示变量的命令

v只读的环境变量

特殊的环境变量

$0   shell程序名

$1-$9     第一个至第九个命令行参数的值

$*    所有命令行参数的值

$#   命令行参数的总数

$$   当前进程的进程ID

……

位置参数

R输出位置参数

利用echo命令输出位置参数

(CTRL+D保存并结束)

R用set命令给未知参数赋值

R移动位置参数

Shift 参数

位置参数左移参数位

Linux操作系统-shell程序设计最全版本(含运行截图)_第3张图片

(2)用户自定义变量

由字母和下划线开头的字母、数字、下划线序列,并且大小写字母意义不同(尽量是大写)

格式:变量名=值或字符串

使用变量:$

说明

u字符串赋值:

v如果在赋给变量的值中要含有空格、制表符或换行符,那么就要用双引号把这个字符串括起来

w在一个赋值语句中可以出现多个赋值,变量赋值可以迭代进行,但必须注意,各赋值动作是从左往右进行的

x变量值可以作为某个长字符串中的一部分。如果它在长字符串的末尾,就可以利用直接引用模式

例如:

Sl=ing

Echo walk$SI

变量名出现在一个长字符串开头或中间,应该用“{}”八变量名括起来。

          dir=/home/user1/

          echo ${dir}m1.c

查看所有shell命令

env

Linux操作系统-shell程序设计最全版本(含运行截图)_第4张图片

用不带参数的set命令可以显示所有“shell变量(包括用户自定义变量)。

(三)shell中的特殊字符

(一)shell的通配符

(1)星号(*) :匹配任意的字符串

(2)问号(?) :匹配任意一个字符

(3)一对方括号([]):方括号中有一个字符组,作用是匹配该字符组所限定的任何一个字符

例如:f[abcd]可以匹配fa、fb、fc、fd,与f[a-d]作用相同

(4)感叹号(!) :表示不在一对方括号中列出的字符

例如:f[!a-d]表示以f开头除了fa、fb、fc、fd的文件名

ls t*

Linux操作系统-shell程序设计最全版本(含运行截图)_第5张图片

(二)Shell的引号

(1)双引号(””)由双引号引起来的字符,除了$、倒引号和反斜线(/)仍保留其功能以外,其余字符作为普通字符对待

(2)单引号(’’)有单引号引起来的字符或字符串都作为普通字符出现

(3)倒引号(``)

ushell解释执行

v利用倒引号的shell解释功能可以进行命令替换

w倒引号的嵌套应用,倒引号钱嵌套时必须使内层一组倒引号用反斜线(/)转义

 

(三)Shell的命令执行顺序操作符

(1)顺序执行

u顺序分隔符(;)多条命令

v管道线(|)顺序执行,把前面命令的输出当做后面命令的输入

(2)逻辑与(&&)

只有前一个命令执行成功以后,后一个命令才能够执行

(3)逻辑或(||)

前一个命令执行不成功,后一个命令才能够执行

Linux操作系统-shell程序设计最全版本(含运行截图)_第6张图片

(四)Shell命令中的注释符、反斜线及后台操作符

(1)注释符(#)

(2)反斜线(\)

转义符

(3)后台操作符(&)

获取字符串长度

string=”abcd”

echo ${#string}      #输出4

变量为数组时,

string=”abcd”

echo ${#string[0]}      #输出4

Linux操作系统-shell程序设计最全版本(含运行截图)_第7张图片

提取子字符串

实例:从字符串第2个字符开始截取4个字符

   string="runoob is a great site"
echo ${string:1:4}  # 输出 unoo

注意:第一个字符的索引值为0

Linux操作系统-shell程序设计最全版本(含运行截图)_第8张图片

(四)Shell编程中的输入输出命令

(1)Shell中的输入输出的标准文件

三种

标准输入文件

标准输出文件

标准错误输出文件

< 输入  >  输出   >>   重定向   2>  错误输出

u输入重定向命令

command < input-file

(输入的文件一定是已经存在的文件) 

将输入的命令执行以后显示在屏幕上,但并不改变原文档中的内容。

Linux操作系统-shell程序设计最全版本(含运行截图)_第9张图片

v输出重定向命令

command > output -file

将命令执行以后的输出内容重定向到指定文件中(覆盖)

Linux操作系统-shell程序设计最全版本(含运行截图)_第10张图片

w输出附加定向命令

command >> output-file

将命令执行以后附加到指定文件的结尾处

 Linux操作系统-shell程序设计最全版本(含运行截图)_第11张图片

x标准错误重定向命令

command 2> error – file

注意

command1 < infile > outfile

     同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。

Linux操作系统-shell程序设计最全版本(含运行截图)_第12张图片

     如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

command > /dev/null

      /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

补充:

    特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

它的基本的形式如下:

command << delimiter    
document

delimiter

作用:是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意:

结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。

开始的delimiter前后的空格会被忽略掉。

(2)shell的输入输出命令

read命令

read 变量1 【变量2】 ……(各参数之间用空格隔开)

变量个数等于给定数据个数

变量个数少于给定数据个数

取值为剩余的全部

变量个数多于给定数据个数

取值为空串

Linux操作系统-shell程序设计最全版本(含运行截图)_第13张图片

echo命令

各参数之间用空格隔开

特殊符号

\b    退格

\c    不将光标移到下行

\f     换页

\n    换行

\r     回车

\t     水平制表符

\      垂直制表符

\\    反斜线

\ON ASCII码为八进制N的字符

特殊符号的转义符功能echo命令输出,必须加上“-e”参数

  “-n”参数代表命令输出以后不换行

(五)shell程序控制结构语句

(一)if语句

(1)两路分支的if语句

if 判断条件

then 命令1

else 命令2

fi

命令语句形式的判断条件

Linux操作系统-shell程序设计最全版本(含运行截图)_第14张图片

 

测试语句形式的判断条件(三种)

字符串测试   文件测试  数值测试(详见下面的测试语句)

(2)多路条件判断分支的if语句

if 判断条件1

then 命令1

elif 判断条件2

then 命令2

else 命令n

fi

Linux操作系统-shell程序设计最全版本(含运行截图)_第15张图片

 

(2)测试语句

格式1

test expression

格式2

[ expression ]

文件测试

-r file      若文件存在并且是用户可读的,则测试条件为真

-w file    若文件存在并且是用户可写的,则测试条件为真

-x file     若文件存在并且是用户可执行的,则测试条件为真

-f file      若文件存在并且是普通文件,则测试条件为真

-d file     若文件存在并且是目录文件,则测试条件为真

-p file     若文件存在并且是FIFO文件,则测试条件为真

-s file     若文件存在并且不是空文件,则测试条件为真

Linux操作系统-shell程序设计最全版本(含运行截图)_第16张图片

 

字符串测试

str                 如果字符串str不是空字符串,则测试条件为真

str1 = str2      如果str1等于str2,则测试条件为真

str1 != str2     如果str1不等于str2,则测试条件为真

-n str             如果字符串str的长度不为0,则测试条件为真

-z str             如果字符串str的长度为0,则测试条件为真

在引用变量及字符串中,要用双引号引上

Linux操作系统-shell程序设计最全版本(含运行截图)_第17张图片

 

数值测试

n1 -eq n2      如果整数n1等于n2,则测试条件为真

n1 -ne n2      如果整数n1不等于n2,则测试条件为真

n1 -lt n2        如果整数n1小于n2,则测试条件为真

n1 -le n2       如果整数n1小于等于n2,则测试条件为真

n1 -gt n2       如果整数n1大于n2,则测试条件为真

n1 -ge n2      如果整数n1大于等于n2,则测试条件为真

Linux操作系统-shell程序设计最全版本(含运行截图)_第18张图片

x用逻辑操作符进行组合的测试语句

!    非

-a   与

-o   或

()     将表达式分组,优先得到结果,括号前后应有空格并用转义字符

Linux操作系统-shell程序设计最全版本(含运行截图)_第19张图片

(3)case语句

case string1 in

str1)

       commands – list1;;

str2)

       commands – list2;;

strn)

       commands – listn;;

esac

Linux操作系统-shell程序设计最全版本(含运行截图)_第20张图片

(4)for语句

for variable [in argument – list]

do

  command – list

done

[in argument – list]为可选项,由三种表达形式

R[argument – list]为变量值表 变量variable依次取值表中各字符串

Linux操作系统-shell程序设计最全版本(含运行截图)_第21张图片

R[argument-list]为文件的表达式

变量的值依次取当前目录(或指定目录)下与文件表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直到所有匹配的文件名取完为止。

Linux操作系统-shell程序设计最全版本(含运行截图)_第22张图片

R[argument-list]为空

     [argument-list]也可以用$*来代替,变量依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。

(5)while语句

格式为:

while expression

do

    command-list

done

Linux操作系统-shell程序设计最全版本(含运行截图)_第23张图片

 

(6)break语句和continue语句

ubreak命令

可以从循环体中退出来。格式为:

break [n]

vcontinue命令

跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。格式为:

continue [n]

(7)算术表达式和退出脚本程序命令

u五种基本的算术运算:

+(加)、-(减)、\*(乘)、/(除)和%(取模)。

shell只提供整数的运算。

格式如下:

    expr n1 运算符 n2

注意:在运算符的前后都留有空格,否则expr不对表达式进行计算,而直接输出它们。

v退出脚本程序命令:

          exit [n]

其中n为设定的退出值,如果未给定n的值,则退出值为最后一个命令的执行状态。 

(8)自定义函数

在shell脚本中可以定义并使用函数。其定义格式为:

 Function( )

 {

       command-list

 }

函数应先定义,后使用。调用函数时,直接利用函数名调用。

退出函数命令

return [n]

(9)until语句(现在不经常使用)

until expression

do

   command – list

done

只要expression的值为假,就执行command – list语句

你可能感兴趣的:(Linux,linux)