目录
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