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

Shell程序设计

(一)Shell简介

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

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

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

cat /etc/shells

head /etc/shells

more /etc/shells

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

 

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

脚本的建立

vi编辑器或cat

利用vi编辑器进行录入

vi 脚本名

录入

ls -l

cal

who

查看

cat 脚本名

shell脚本的执行

 

输入定向的执行方式

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 参数

位置参数左移参数位

(2)用户自定义变量

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

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

使用变量:$

说明

u字符串赋值:

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

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

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

例如:

Sl=ing

Echo walk$SI

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

          dir=/home/user1/

          echo ${dir}m1.c

查看所有shell命令

env

用不带参数的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*

(二)Shell的引号

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

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

(3)倒引号(``)

ushell解释执行

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

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

 

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

(1)顺序执行

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

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

(2)逻辑与(&&)

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

(3)逻辑或(||)

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

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

(1)注释符(#)

(2)反斜线(\)

转义符

(3)后台操作符(&)

获取字符串长度

string=”abcd”

echo ${#string}      #输出4

变量为数组时,

string=”abcd”

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

提取子字符串

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

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

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

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

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

三种

标准输入文件

标准输出文件

标准错误输出文件

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

u输入重定向命令

command < input-file

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

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

v输出重定向命令

command > output -file

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

w输出附加定向命令

command >> output-file

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

 

x标准错误重定向命令

command 2> error – file

注意

command1 < infile > outfile

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

     如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /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】 ……(各参数之间用空格隔开)

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

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

取值为剩余的全部

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

取值为空串

echo命令

各参数之间用空格隔开

特殊符号

\b    退格

\c    不将光标移到下行

\f     换页

\n    换行

\r     回车

\t     水平制表符

\      垂直制表符

\\    反斜线

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

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

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

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

(一)if语句

(1)两路分支的if语句

if 判断条件

then 命令1

else 命令2

fi

命令语句形式的判断条件

 

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

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

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

if 判断条件1

then 命令1

elif 判断条件2

then 命令2

else 命令n

fi

 

(2)测试语句

格式1

test expression

格式2

[ expression ]

文件测试

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

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

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

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

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

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

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

 

字符串测试

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

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

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

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

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

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

 

数值测试

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,则测试条件为真

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

!    非

-a   与

-o   或

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

(3)case语句

case string1 in

str1)

       commands – list1;;

str2)

       commands – list2;;

strn)

       commands – listn;;

esac

(4)for语句

for variable [in argument – list]

do

  command – list

done

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

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

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

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

R[argument-list]为空

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

(5)while语句

格式为:

while expression

do

    command-list

done

 

(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语句

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值