导航:首页 > 编程知识 > shell编程done什么意思

shell编程done什么意思

发布时间:2025-06-26 16:26:19

『壹』 shell里的for循环怎么写

for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。

其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。
for的语法结构如下:

1
2
3
4

for 变量 in 串行
do
执行命令
done

说明:

行1,讲串行中的字段迭代放入变量中
行2-4,接着将重复执行do和done之间的命令区域,直到串行中每一个字段军处理过为止。
流程图:

用例1
用for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录

1
2
3
4
5
6
7
8
9
10
11
12

#!/bin/bash
for k in $( seq 1 10 )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq 1 10 )
do
mkdir bbb${l}
cd /home/kuangl/aaa${k}
done
cd ..
done

说明:
行2,seq 用于产生从某个数到另外一个数之间的所有整数。
行4,在家目录下创建文件夹。
行6,在使用一个for循环创建文件夹
测试结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

[root@test01 kuangl]# ll
total 80
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9
[root@test01 kuangl]# cd aaa1
[root@test01 aaa1]# ll
total 40
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9

1

用例2

列出var目录下各子目录占用磁盘空间的大小。

1
2
3
4
5
6
7

#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
[ -d $k ] && -sh $k
done

说明:
行4,对/var目录中每一个文件,进行for循环处理。
行6,如果/var下的文件是目录,则使用 -sh计算该目录占用磁盘空间的大小。
测试结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

[root@test01 scripts]# ./var.sh
276M cache
4.0K cvs
84K db
8.0K empty
4.0K ftp
4.0K games
4.0K gdm
21G lib
4.0K local
16K lock
7.4G log
4.0K logs
0 mail
4.0K nis
4.0K opt
4.0K preserve
336K run
3.7G spool
212K tmp
4.1G www
4.0K yp

『贰』 shell语法检查模式详解

启用 verbose 调试模式

在进入本指导的重点之前,让我们简要地探索下verbose 模式。它可以用 -v 调试选项来启用,它会告诉 shell 在读取时显示每行。要展示这个如何工作,下面是一个示例脚本来批量将 PNG 图片转换成 JPG 格式。

将下面内容输入(或者复制粘贴)到一个文件中。

#!/bin/bash

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

done

exit 0

接着保存文件,并用下面的命令使脚本可执行:

$ chmod +x script.sh

我们可以执行脚本并显示它被 Shell 读取到的每一行:

$ bash -v script.sh

在 Shell 脚本中启用语法检查调试模式

使用 -n 激活语法检查模式

它会让 shell 读取所有的命令,但是不会执行它们,它(shell)只会检查语法。一旦 shell 脚本中发现有错误,shell 会在终端中输出错误,不然就不会显示任何东西。

激活语法检查的命令如下:

$ bash -n script.sh

因为脚本中的语法是正确的,上面的命令不会显示任何东西。所以,让我们尝试删除结束 for 循环的 done 来看下是否会显示错误:

下面是修改过的含有 bug 的批量将 png 图片转换成 jpg 格式的脚本。

#!/bin/bash

#script with a bug

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

exit 0

保存文件,接着运行该脚本并执行语法检查:

$ bash -n script.sh

从上面的输出中,我们看到我们的脚本中有一个错误,for 循环缺少了一个结束的 done 关键字。shell 脚本从头到尾检查文件,一旦没有找到它(done),shell 会打印出一个语法错误:

script.sh: line 11: syntax error: unexpected end of file

我们可以同时结合 verbose 模式和语法检查模式:

$ bash -vn script.sh

我们还可以通过修改脚本的首行来启用脚本检查

如下面的例子:

#!/bin/bash -n

#altering the first line of a script to enable syntax checking

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

exit 0

如上所示,保存文件并在运行中检查语法:

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

此外,我们可以用内置的 set 命令来在脚本中启用调试模式。

下面的例子中,我们只检查脚本中的 for 循环语法。

#!/bin/bash

#using set shell built-in command to enable debugging

#convert

#enable debugging

set -n

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

#disable debugging

set +n

exit 0

再一次保存并执行脚本:

$ ./script.sh

总的来说,我们应该保证在执行 Shell 脚本之前先检查脚本语法以捕捉错误。

『叁』 shell中done后跟 < 一个重定向是什么意思 done < /root/waa/userinfo.dat

while read line

do

done < file

read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;然后循环处理file的第二行、第三行。。。一直到file的最后一行。还记得whilewhile条件循环语句根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。

『肆』 在linux中 “# for i in `ls` ; do su -sh $i ; done ”命令是什么意思

首先 在命令前面有个 '#'的意思是本句话是注释弯圆芦,并不实际执行...
再说你后面语句的意思,for ... in .... ; done是循环结构,ls是查看目录下的文件,su是以另一个身份($i),来运行一个shell,但问题是su 没有-sh选项,也就是说你这句话应该有问题才对.
整体分析是遍历将当前腔卖目录下的文件,每个文件执行su -sh XXX(这里XXX是当前目录下的所有文件埋带),功能尚不明确,还请楼主明示.

『伍』 求高人注释下linux的shell程序代码

#!/bin/sh # 指定解释器
#
#Filename: square.sh # 文件名
int=1 # 定义变量int并初始化为1

#功能:输出1~5的平方
while [ $int -le 5 ] # int小于5时循环
do
sq=`expr $int \* $int` # 计算int * int
echo $sq # 输出计算结果
int=`expr $int + 1` # 循环变量加1
done
echo "Job completed" # 输出结束信息

$ sh square.sh # 执行脚本 square.sh
1 # 输出结果
4
9
16
25
Job completed

『陆』 linux shell脚本读取用户输入的参数

$# 是传给脚本的参数个数

$0 是脚本本身的名字
$1是传递给该shell脚本专的第一个参属数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表

例如:

#!/bin/sh
echo "arg_num: $#"
echo "shell_name: $0"
echo "first_arg : $1"
echo "second_arg : $2"
echo "args : $@"

阅读全文

与shell编程done什么意思相关的资料

热点内容
ftp配置文件修改用户权限 浏览:213
荣耀下载的app在哪里找到 浏览:17
百度网盘怎么转存视频文件 浏览:985
如何能快速搜索文件夹里面的图片 浏览:573
印度买药的网站叫什么 浏览:155
哪里可以买到充值app 浏览:861
如何打开tif格式文件 浏览:461
excel所有文件打开是空白 浏览:383
win10系统安装文件没反应 浏览:47
丰巢管家app怎么改所在城市 浏览:980
ps建立文件单位 浏览:989
如何测量氧传感器数据 浏览:446
苹果将永久退出中国 浏览:581
初学计算机编程为什么先学c 浏览:773
js方法传参 浏览:984
程序库框架设计 浏览:787
如何找到同网络的主机 浏览:950
淘宝app运费险怎么买 浏览:438
三菱plc的编程怎么保存 浏览:69
无锡建网站制作多少钱 浏览:319

友情链接