Linux命令行与shell脚本编程之笔记(5)

目录

44. realpath 命令

45.空格的重要性

46. for循环

47.  更改字段分隔符

48. 用通配符读取 文件目录

49.  C 语言风格的 for 命令

50. while 命令 和 until 命令

51. break命令

52. continue 命令 

53. 处理循环的输出


44. realpath 命令

命令格式:realpath [OPTIONS] FILES

命令简述:用于获取指定目录或文件的绝对路径

realpath ./hello.tgz
/home/cjh/data/test/src/hello.tgz

45.空格的重要性

再次强调,shell的语法对空格就是很敏感,比如在if 或 while语句里:

if [ -n "${12}" ]; then					# Check the 12th arg exists or not
	echo "The 12th arg is " ${12}
else
	echo "The 12th arg does not exist"
fi

如果直接if[ -n "${12}" ], 就会报错,必须加上空格。


46. for循环

for语句用来遍历列表是很好的,默认的分隔符是空格。

#!/bin/bash

list="apple banana pear orange"
for test in $list
do
	echo "My fruit is $test"
done

echo "The fruit-$test is still available"
test=peach
echo "The fruit-$test is still available"

注意!循环变量 test 的作用域,是整个脚本剩下来的部分!


47.  更改字段分隔符

默认情况下,bash shell会将下列字符当作字段分隔符:

  • 空格
  • 制表符
  • 换行符

IFS环境变量定义了bash shell用作字段分隔符的一系列字符。

IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD

通过这种办法,可以巧妙的临时修改字段分隔符。


48. 用通配符读取 文件目录

#!/bin/bash

for file in /home/cjh/Shell_Programs/* /home/cjh/CMake_Programs/* 
do
	# echo $file
	if [ -d "$file" ]
	then
		echo "$file is a directory"
	elif [ -r "$file" ]
	then
		echo "$file is a document"	
	fi
done

建议在[  ]里面比较时,给变量加上双引号 "$file",万一文件名有空格呢?


49.  C 语言风格的 for 命令

#!/bin/bash

for (( i=1; i <= 10; i++ ))
do
	echo "The next number is $i"
done

for (( i=1; i <= 10; i++ )); do
	echo "The next number is $i"
done

 C 语言风格的 for 命令,更适合做重复计算,而不是之前的目录遍历。

注意!do 或 then 排放的位置有如图所示的2种。


50. while 命令 和 until 命令

#!/bin/bash

var1=10
while [ $var1 -gt 0 ]
do
	echo $var1
	var1=$[ $var1 - 1 ]
done

var2=100
until [ $var2 -eq 0 ]
do
	echo $var2
	var2=$[ $var2 - 25 ]
done

while命令:满足条件才执行,一直到不满足时,就不执行下去了。

until命令:不满足条件才执行,哪一次真的满足条件了,就不执行下去了。


51. break命令

break 默认跳出当前一层循环。

#!/bin/bash

for (( a = 1; a < 4; a++ )); do
	echo "Outer loop: $a"
	for (( b = 1; b < 100; b++ )); do
		if [ $b -gt 4 ]; then
			break 
		fi
		echo " Inner loop: $b"
	done
done

break n 跳出n层循环。

#!/bin/bash

for (( a = 1; a < 4; a++ )); do
	echo "Outer loop: $a"
	for (( b = 1; b < 100; b++ )); do
		if [ $b -gt 4 ]; then
			break 2
		fi
		echo " Inner loop: $b"
	done
done


52. continue 命令 

continue 默认跳到当前一层循环的下一次计算。

#!/bin/bash

for (( a = 1; a <= 5; a++ ))
do
	echo "Iteration $a:"
	for (( b = 1; b < 3; b++ ))
	do
		if [ $a -gt 2 ] && [ $a -lt 4 ]
		then
			continue
		fi
		var3=$[ $a * $b ]
		echo " The result of $a * $b is $var3"
	done
done > output.txt

continue n 往外跳到第n层循环的下一次计算。

#!/bin/bash

for (( a = 1; a <= 5; a++ ))
do
	echo "Iteration $a:"
	for (( b = 1; b < 3; b++ ))
	do
		if [ $a -gt 2 ] && [ $a -lt 4 ]
		then
			continue 2
		fi
		var3=$[ $a * $b ]
		echo " The result of $a * $b is $var3"
	done
done > output.txt


53. 处理循环的输出

>   所有echo 语句的输出都导入到某个文件

#!/bin/bash

for (( a = 1; a <= 5; a++ ))
do
	echo "Iteration $a:"
	for (( b = 1; b < 3; b++ ))
	do
		if [ $a -gt 2 ] && [ $a -lt 4 ]
		then
			continue 2
		fi
		var3=$[ $a * $b ]
		echo " The result of $a * $b is $var3"
	done
done > output.txt

通过管道进行再处理

#!/bin/bash

for (( a = 1; a <= 5; a++ ))
do
	echo "Iteration $a:"
	for (( b = 1; b < 4; b++ ))
	do
		if [ $a -gt 2 ] && [ $a -lt 4 ]
		then
			continue 2
		fi
		var3=$[ $a * $b ]
		echo " The result of $a * $b is $var3"
	done
done | sort

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值