Linux Shell 大杀器:循环执行命令达到高效工作! (linux shell 循环执行命令)

对于 Linux 系统管理员或开发人员而言,Shell 编程是一项不可或缺的技能,它可以让我们完成许多自动化脚本任务,从而提高效率和减少错误。而循环执行命令则是 Shell 编程中最基本的技巧之一。

循环执行命令的流程通常如下:

1. 定义需要循环执行的命令,包括需要处理的文件、目录、文本等。

2. 判断是否还有需要处理的对象,如果有则执行相应的命令操作,如果没有则退出循环。

3. 处理下一个对象。

基本的循环类型有三种: for 循环、while 循环和 until 循环。

1. for 循环

for 循环主要是用来迭代处理数组的。下面是一个示例:

“`bash

#!/bin/bash

my_array=(“apples” “bananas” “cherries” “dates”)

for fruit in “${my_array[@]}”

do

echo “I like to eat $fruit.”

done

“`

这个脚本会输出:

“`

I like to eat apples.

I like to eat bananas.

I like to eat cherries.

I like to eat dates.

“`

2. while 循环

while 循环是用来在条件满足的情况下持续执行一系列的命令。下面是一个示例:

“`bash

#!/bin/bash

x=1

while [ $x -le 10 ]

do

echo “The value of x is $x”

x=$((x+1))

done

“`

这个脚本会输出:

“`

The value of x is 1

The value of x is 2

The value of x is 3

The value of x is 4

The value of x is 5

The value of x is 6

The value of x is 7

The value of x is 8

The value of x is 9

The value of x is 10

“`

3. until 循环

until 循环是和 while 循环类似的,只不过是在条件不满足的情况下执行。下面是一个示例:

“`bash

#!/bin/bash

x=1

until [ $x -ge 10 ]

do

echo “The value of x is $x”

x=$((x+1))

done

“`

这个脚本会输出:

“`

The value of x is 1

The value of x is 2

The value of x is 3

The value of x is 4

The value of x is 5

The value of x is 6

The value of x is 7

The value of x is 8

The value of x is 9

“`

循环执行命令作为一种基本的 Shell 编程技巧,能够帮助开发人员和 IT 管理员在执行一些相似的任务时节省时间和劳动力。基本的循环类型包括 for 循环、while 循环和 until 循环,不同类型适用于不同的场景。在编写脚本时,应根据任务的性质和执行的命令类型选择适当的循环类型,从而达到高效工作的目的。

相关问题拓展阅读:

Linux主要shell命令详解

命令替宽尺换

  命令替换和重定慎圆高向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:

  command1

`command2`

  其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:

  $

cd

`pwd`

  该命令将pwd命令列出的目腔嫌录作为cd命令的参数,结果仍然是停留在当前目录下。

利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如:

  $

today=`date`

  $

echo

Today

is

$today

  Today

is

Mon

Apr

16:20:13

CST

1999

  $

  反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线()将其转义。例如:

  $

abc=`echo

The

number

of

users

is

`who|

wc-l“

  $

echo

$abc

  The

number

of

users

is

  $

  在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到“中命令的结果,它实际上要去执行“中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且“所包含的可以是任何一个合法的Shell命令,如:

  $

ls

  note

readme.txt

Notice

Unix.dir

  $

TestString=”`echo

$HOME

`

`

ls

[nN]*`”

  $

echo

$TestString

  /home/yxz

note

Notice

  $

  其他情况,读者可自行试之。

  1.

注释符

  在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。

  此外还有一些特殊字符如:用于输入/输出重定向与管道的、

>和|;执行后台命令的&;命巧颤令执行操作符&&和||及表示命令组的{}将在下面各小节中加以介绍。

  

标准输入/输出和重定向

  1.

标准输入与输出

  我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件升宽蚂(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

  我们以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

  $

cat

config

  将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:

  $

cat

  Hello

world

  Hello

world

  Bye

  Bye

  

  $

  用户输入的每一行都立刻被cat命令输出到屏幕上。

  另一个例子,命令sort按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。

  $

sort

  bananas

  carrots

  apples

  

  apples

  bananas

  carrots

  $

  这时我们在屏幕上得到了已排序的采购单。

  直接使用标准输入/输出文件存在以下问题:

  输入数据从终端输入时,用户费了半天劲输入的数吵埋据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

  输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

  为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

linux操作系统的shell命令有哪些

1 文件与目录操作命令

1.1文件内容查询命令 grep、fgrep、egrep

语法:grep

选项:

-E 每个模式作为一个扩展的正则表达式对待

-F 每个模式作为一组固定字符串对待,而不作为正则表达式

-i 比较时不区分大小写

-l 显示首次匹配匹配串所在的文件名并用换行符将其分开。当在文件中多次出现匹配串时,不重复显示次文件名;

-x 只显示整行严格匹配的行

1.2文件查找命令 find、locate

语法:

find 起始目录 寻找条件 操作以名称和文件属性查找

选项: -name‘字串‘ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、。

-lname‘字串‘ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、。

-gid n 查找属于ID号为n的用户组的所有文件。

-uid n 查找属于ID号为n的用户的所有文件。

-group‘字串‘ 查找属于用户组名为所给字串的所有的文件。

-user‘字串‘ 查找属于用户名为所给字串的所有的文件。

-path‘字串‘ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、。

-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711、644。

-type x 查找类型为 x的文件,

语法:locate 相关字

1.3文件的复制、删除和移动命令 文件复制命令

源文件或目录 目标文件或目录

选项:

– a 通常在拷贝目录时使用

-d 拷贝时保留连接

-f 删除已经存在的目标文件而不提示

-i 和f选项相反

-p 此时cp除复制源文件内容外,还将其修改的时间和访问权限也复制到新文件中

-r 若给出的源文件是一目录文件,此时cp将递归复制该目录下的所有晌虚的子目录和文件,此时目标文件必须为一个目录名;

-l 不作拷贝,只是链接文件文件移动命令

mv 源文件或目录 目标文件或目录

-i 交互式操作

-f 禁止交互式操作文件删除命令

文件…

-f 忽略不存在的文件,从不给出提示

-r 指示rm将参数中列出的全部目录和子目录均递归地删除

-i 进行交互式删除 1.4文件链接命令

ln 目标 或 ln 目标 目录

选项:

– s 建立符号链接

1.5目录的创建和删除命令 mkdir 创建一个目录

语法: dirname

选项: – m 对新建目录设置存取权限

-p 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

rmdir 删除空目录

语法: rmdir dirname

选项:

– p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。

1.6改变工作目录,显示目录内容命令

1、改变工作目录: cd

2、显示当前工作的目录的绝对路径: pwd

3、显示目录内容: ls

选项:

– a 显示指定目录下所有子目录与文件,包括隐藏文件;

-c 按照文件的修改时间排序

-C 分成多列显示各项

-d 如果参数是目录,只显示其名称而不显示其下的个文件

-F 在宴孙燃目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。

-l 以长格式来显示文件的详细信息

-L 若指定的名称为一个符号链接,则显示链接所指向的文件

-t 显示时按修改时间而不是名字排凯胡序

-u 显示时按文件上次存取的时间而不是名字排序

4、改变文件或目录的访问权限命令chmod 文件名?

Who选项:

– u表示用户,即文件和目录的所有者

-g表示同组用户

-o(other)表示其他用户

-a (all)表示所有用户

操作符号: + 添加某个权限 – 取消某个权限 = 赋予给定权限并取消其他所有的权限(如果有的话)

mode 选项:

– r 可读

-w 可写

-x 可执行 chgrp group filename? 改变目录或文件所属的组

chown 用户或组 文件

1.7备份与压缩命令

1、tar命令 为文件和目录创建档案语法:

tar 文件或者目录 : u 主选项

-c 创建新的档案文件。如果用户想备份一个目录或是一些文件,则选此项

-r 把要存档的文件追加到档案文件的末尾

-t 列出档案文件的内容,查看已经备份了哪些文件;

-u 更新文件

-x 从档案文件中释放文件;

-u 辅助选项

-b 该选项为磁带机设定的,其后跟一位数字,用来说明区块的大小,系统预设值为20

-f 使用档案文件或设备,这个选项通常是必选的

-k 保存已经存在的文件。例如把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖;

-m 在还原文件时,把所有文件的修改时间设定为现在;

-M 创建多卷的档案文件,以便在几个磁盘中存放;

-v 详细报告tar处理的文件信息

-w 每一步都要求确认

-z 用gzip来压缩/解压缩文件

2、gzip命令 压缩/解压缩命令

语法:gzip 压缩(解压缩)的文件名

选项:

-c 将输出写到标准输出上,并保留原有文件

-d 将压缩文件解压

-l 显示每个压缩文件的详细信息

-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩

-t 测试、检查压缩文件是否完整

-v 对每一个压缩和解压的文件,显示文件名和压缩比

3、unzip 命令 用MS windows下的压缩软件winzip压缩的文件在linux系统下展开

语法:unzip 压缩文件名.zip

选项: -x 文件列表 解压缩文件,但不包括指定的file文件

-v 查看压缩文件目录,但不解压

-t 测试文件有无损坏 ,但不解压

-d 目录 将压缩文件解到指定目录下

-z 只显示压缩文件的注解

-n 不覆盖已经存在的文件

-o 覆盖已经存在的文件且不要求用户确认

-j 不重建文档的目录结构,把所有文件解压到同一目录下

1.8在LINUX环境下运行DOS命令 linux系统提供了一组称为mtools的可移植工具,可以让用户轻松地从标准的DOS软盘上读写文件和目录。

mcd 目录名 改变MSDOS目录 mcopy 源文件 目标文件 在MSDOS和UNIX之间复制文件;

mdel 目录名 删除MSDOS目录 mdir 目录名 显示MSDOS目录 mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统 rnlabel 驱动器号 产生MSDOS卷标 mmd 目录名 删除MSDOS目录 mren 源文件 目标文件 重新命名已存在的MSDOS文件 mtype 文件名 显示MSDOS文件的内容

2 设备管理命令

1)linux采用下面的形式定义一个IDE硬盘:/dev/hd

2)SCSI硬盘使用同样的机制表示: /dev/sd

3)对于一般的LINUX分区,可以用mkfs将其格式化并生成文件系统,命令如下: mk2fs –c ;

4)装载文件系统:

mount –t ext2 partition mountpiont 其中,

-t为指定装载文件系统的类型;

-o指定一些选项,如只读ro,可读可写rw等等; partition定义分区名称; mountpiont定义文件系统被装载的目录名称。

5)装载CD-ROM文件系统:mount –t iso9660 –r /dev/cdrom /mnt/cdrom

6)装载软驱文件系统: CODE:mount –t msdos –rw /dev/fd0 /dev/mnt/floppy

7)卸载文件系统 CODE:umount /mnt/cdrom 磁带设备的安装要注意以下几点:

1、 首先要选择一个唯一的SCSI ID号,然后再将设备链接到适当的位置

2、 选择驱动程序。

3、 生成设备文件。SCSI磁带设备的主要设备号是9,次要设备号是0。设备文件名通常是/dev/nrst0(不支持回绕的磁带设备)或/dev/nst0(支持回绕的磁带设备) 用 ls /dev/*rst* 检查磁带设备文件是否存在,如果不存在,用 mknod –m 666 /dev/nrst0 c 9 9 mknod –m 666 /dev/rst0 c 9 0 生成

4、 可以对块长度、缓存、磁带密度等参数进行一些设置,例如 mt setblk 20 将块长度指定为20 mt setblk 0 指定块程度没有限制

5、 通过检查系统的启动信息可以确定系统是否识别了新的磁带设备。用dmesg命令,查看是否有以下类似的信息: aha274x:target 4now synchronous at 4.4Mb/s Vendor:TANDBERG Model:TDC 3800 Rev: =05: Type: Sequential-Access ANSI SCSI revision: 02 Detected scsi tape st0 at scsi0, id4, lun0 Scsi : detected 1 SCSI tape 1 SCSI crom 1 SCSI disk total

3 软件包管理命令

3.1软件安装的步骤 在LINUX系统上安装软件的步骤有:

1、 查找所要安装软件的源文件

2、 把源文件解开放到一个目录中,命令如下: tar zxvf ;

3、 针对本操作系统配置源文件。可以是编辑make文件或其他文件,也可能是运行该软件自带的自动配置工具,如./configure

4、 make源文件,通常是运行make命令,即执行 make

5、 安装二进制文件和其他支撑文件,运行命令: make install

6、 最后,完成所有其他必须的配置

3.2软件包管理命令 QUOTE: rpm –ivh ; // 安装指定的软件包,并在安装过程中用#表示安装的进度 rpm –Uvh ; // 更新一个已经存在的或还没安装好的软件包,并删除所有该软件包的旧版本。 rpm –e //卸载一个rpm软件包 rpm –qa // 查看系统中已经安装的软件包 rpm –q ; // 查看系统中某个软件包的版本号; rpm –qlp ; //列出某个软件包中的所有文件 rpm –qf ; //找出一个文件属于哪个软件包

4 LINUX系统常用命令

4.1 与系统管理有关的命令 Wall (Write All) 对全部已 登录的用户发送信息,用户可以先反要发送的信息写好存入一个文件中,然后输入: # wall

-k 并不真正关机,而只是发出警告信息给所有的用户。

-r 关机后立即重新启动。

-h 关机后不重新启动。

-f 快速关机,启动时跳过fsck。

-n快速关机,不经过init程序。

-c 取消一个已经运行的shutdown 例:系统马上关机:Shutdown –h now Free命令查看当前系统内存的使用情况, CODE:Free CODE:-b 以字节为单位显示。

-k 以K字节为单位显示。

-m 以M字节为单位显示。 Uptime QUOTE: 显示系统已经运行了多长的时间:现在时间、系统已经运行的时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

4.2与用户有关的命令 Passwd命令设置、更换用户口令。

Passwd Su 使一个普通的用户具有超级用户的权利,离开可用EXIT命令。 4.3其它命令 Echo命令在显示器上显示一段文字,一般起到一个提示的作用。

echo 字符串 Cal命令显示某年某月的日历。

cal >

选项的含义:

-j 显示也给定月中的每一天是一年中的和几天(从1月1日算起)。

-y 显示也整年的日历。 Date命令 date命令的功能是显示和设置系统日期和时间。 4.4磁盘管理 磁盘空间管理 df命令检查文件系统的磁盘空间占用局部。

Df

-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。

-k 以K字节为单位显示。

-i 显示i节点信息,而不是磁盘块。

– t 显示各指定类型的文件系统的磁盘空间使用情况。

-x 列出不是某一指定类型文件系统的磁盘窨使用情况(与t相反)。

-T 显示文件系统类型。 du命令 du的英文原意为disk usage,含义为显示磁盘空间的使用情况。功能是统计目录(或文件)所占磁盘空间的大小。

du

-s 对每人Names 参数只给也占用的数据块总数。

-a 递归地显示指定目录中各文件用子孙目录中的各文件占用的数据块总数。

-b 以字节为单位列也磁盘窨使用情部(缺省以K字节为单位)

-k 以1024字节为单位列也磁盘空间使用情况。

-c 最后再加上一个总计(系统缺省)

-l 计算所有的文件大小,对硬链接文件,则计算多次。

-x 跳过在不同文件系统上的目录不予统计。 dd命令把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换。

语法: dd 〔选项〕 if =输入文件(或设备名称)。 of =输出文件(或设备名称)。 ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。 skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs = bytes 一次写入bytes字节,即写 入缓冲区的字节数。 bs = bytes 同时设置读/写缓冲区的字节数(等于设置obs和obs)。 cbs = bytes 一次转换bytes字节。 count = blocks 只拷贝输入的blocks块。 conv = ASCII 把EBCDIC码转换为ASCII码。 conv = ebcdic 把ASCII码转换为EBCDIC码。 conv = ibm 把ASCII码转换为alternate EBCDIC码。 conv = blick 把变动位转换成固定字符。 conv = ublock 把固定们转换成变动位 conv = ucase 把字母由小写变为大写。 conv = lcase 把字母由大写变为小写。 conv = notrunc 不截短输出文件。 conv = swab 交换每一对输入字节。 conv = noerror 出错时不停止处理。 conv = sync 把每个输入记录的大小都调到ibs的大小(用ibs填充)。 fdformat命令低级格式化软盘。

format device QUOTE: -n 格式化后不做检验

4.5常用的网络命令 FTP命令 Telnet命令。

Netstat命令

-a 显示所有的scoket,包括正在监听和。

-c 每隔1秒就重新显示一遍,直到用户中断它。

-i 显示所有网络接口的信息,格式同”ifconfig –e”

-n 以网络IP地址代替名称,显示也网络连接情形。

-r 显示核心路由表,格式同”route –e:。

-t 显示TCP协议的连接情况。

-u 显示UDP协议的连接情况。

-v 显示正在进行的工作。 nslookup命令。 finger命令,功能是查询用户的信息。 ping命令。(用户和组的管理可以使用工具:TurboUserCfg或是XturboUserCfg。)

4.6有关进程的命令。 进程和启动 at 时间 at –c 作业 AT命令启动的进程系统只执行一次。 batch 在系统负载较小时,资源比较空闲时执行。 cron命令按一定的时间间隔执行命令。 crontab命令用于安装、删除或列出用于驱支cron后台进程的表格。进程查看

who命令。 w命令是一个比who命令更强大的命令 w

– -h 不显示标题。

-u 当列出当前进程和CPU时间时忽略用户名。

-s 使用短模式。不显示登录时间JCPU和PCPU时间。

-f 切换显示FROM项,也就是远程主机名项。

-V 显示版本信息。 user 只显示指定用户的情况。 ps命令。

-e 显示所有进程。

-f 全格式

-h 不显示标题。

-l 长格式。

-w 宽输出。 a 显示终端上所有进程,包括其他用户的进程。 r 只显示正在运行的进程。 x 显示没有控制终端的进程。 top 命令动态显示系统当前的进程和其他状况。 5系统的启动过程。

要知道有哪些命令,首先你要扒粗卜知道命令凳郑就是一个春穗个程序,大多是没有图形界面的。

其实你在终端里边输入一个命令就是执行这个程序。比如说一个目录下有一个可执行程序myprint.exe,它的作用就是输出hello world!!

那么你用cd转到该目录,点斜杠运行这个程序(./myprint.exe,然后按ENTER键),你就会看到这个程序运行了,输出hello world。事实上一个命令就是这样,只是你不需要转到这个可执行文件所在的目录,也不用点斜杠,因为这个程序所在的目录是已经被添加到系统path里边的。你在Linux终端下输入命令echo $PATH就可以看到当前的的系统path里边都有哪些目录。

一般情况下/bin:/usr/bin等目录是系统已经添加进去的了。你去看一下,很多命令都是都可以在这些目录下(/bin /usr/bin)找到他的可执行文件。

这是我的一个关于系统path的一些介绍,可以去看一下

希望我的回答能帮到你,谢谢!

Linux操唯孝作系统shell命令很多,多买指带稿几本Linux书看看,先学会shell环境的轮行握廓,有什么具体不会的,再来问我。

shell命令?

乱七八糟在加参数有2023多个。你指那些呀?

内置命令用help查看

linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。

bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。

1、命令行参数

向shell脚本传递数据的最基本方式是使用命令行参数。

1)读取参数

读取输入的参数的变量为位置参数,位置参数通过标准数字表示,

其中$0为程序名称,$1为之一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。

shell脚本自动将命令行参数赋值给各个位置变量。

同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)

当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。

2)读取程序名称

传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。

使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。

3)测试脚本

当脚本认为应该包含参数,却实际上没有数据时,就会出错。

好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。

例子:if then .. else .. fi

2、特殊的参数变量

用于跟踪命令行参数

1)参数计数

使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#

例子:if 即可测试参数个数

可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)

2)获取所有数据

变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。

变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数

3、移位

shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)

在不清楚参数数目情况下,这是一个迭代参数的好办法。

可以为shift提供一个参数,来实现多位移变化。

4、处理选项

选项是由破折号引导的单个字母,用于更改命令的行为。

1,找出选项

1)处理简单选项

可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。

2)从参数中分离选项

同时使用选项和参数时,可以使用–指示选项列表的结束。发现–后,shell就知道后面的是普通参数了,停止使用case处理选项。

3)处理带值的选项

选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:

2,使用getopt命令

getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析

1)命令格式

getopt可以接受任森余意形此察滚式的选项和参数列表,并自动将它们转换为适当的格式。

命令格式为: getopt options optstring parameters

选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。

2)脚本中使用getopt

需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。

需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`

但是getopt命令不能没猜很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:

3)更高级的getopts命令

getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。

非常适宜于在循环中解析所有命令行参数

格式为: getopts optstring variable

$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。

注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。

好的特性:

1)可以在参数值中包含空格

2)选项字母和参数值中间可以没有空格

3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号

5、标准化选项

有一些字母选项具有标准含义。更好按照标准含义定义选项意义

-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y

6、获取用户输入

当需要在执行过程中获得执行脚本人员的输入,使用read命令

1)基本读取

read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。

-p 允许在read命令行中直接指定一个提示。

可以指定多个变量,也可以不指定将放置在reply环境变量中)

2)计时

使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。

使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入

3)默读

使用-s使输入不显示在终端例如输入密码)

4)读取文件

最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

echo “”

echo “1、命令1”

echo “贺洞尘2、命颤迹令2”

echo “3、命令3”

echo “”

echo “请输入要执行的菜单命令(1/2/3):”

read com

case $com in

1)

命禅禅令1

;;

2)

命令2

;;

3)

命令3

;;

*)

echo “输入命令错误”

;;

关于linux shell 循环执行命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux Shell 大杀器:循环执行命令达到高效工作! (linux shell 循环执行命令)