Linux更多结构化命令
更多结构命令
更多结构化命令
-
for循环
- 用于遍历或生成一系列值得循环
- 语法
for var in list
do
commands
done
-
读值
-
从列表读值
for var in value1 value2 value3 value...
for var in "value1 value2 value3 ...."-
注意事项
- value与value之间是以空格作为空格符(即空格来区分value)
- 如果value数据中包含空格,循环会默认把空格后的数据作为新value,解决办法是给包含空格的value加上双引号
- 如果value中有单引号,需要使用转义符
-
技巧
- 向已有字符串列表添加拓展值可使用
list=$list" value"(可理解为字符串拼接)
- 向已有字符串列表添加拓展值可使用
-
-
从命令执行结果读值
for var in $(command) -
读取文本文件的值
for var in $(cat filename)-
注意事项
- value与value之间分隔符可以是空格也可以是换行符,如果是空格作为分隔符,注意value内不要有空格
-
-
更改默认分隔符
-
shell中的分隔符是由环境遍历IFS决定的,默认是空格,制表符和换行符;如果自定义分隔符,可通过在脚本中重新定义和修改IFS变量的值来改变,此方法可解决误把value中带空格的值后面的当作是新值的问题
-
自定义单个分隔符
IFS=$'\n'(只会把换行符当作分隔符,而自动忽略制表符和空格) -
自定义多个分隔符
IFS=$'\n':;"(把换行,冒号,分号,双引号作为分隔符)
-
-
注意事项
-
如果仅仅想在某个脚本中某个位置更改默认分隔符,其他位置则使用原来系统的默认分隔符,可在修改之前备份,使用之后恢复
- IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD
- IFS.OLD=$IFS
-
-
-
使用通配符
-
匹配某个目录未知文件
for var in path/directory/*-
注意事项
- 变量的文件名可以包含空格,但需要使用$双引号来引用
-
-
-
-
for循环的仿C风格
-
语法
for (( variable assignment ; condition ; iteration process )) -
单变量使用
for ((a=0;a<10;a++)) -
多变量使用
for ((a=0,b=10;a<10;a++,b--))
-
-
while循环
- 根据所给条件执行循环内容
- 语法
while test command
do
other commands
done
-
常用用法
while [ expression] -
注意事项
- 预先定义的变量在循环中必须得到更改,否则会产生死循环
var=10
while [ $var -gt 0]
do
echo $var
var=$[$var-1]
done
-
until循环
- 与while循环类似,但只在条件为假的时候执行
- 语法
until test commands
do
other commands
done
-
注意事项
- 只有在until后面的命令执行返回一个非零的状态码时,才会执行循环
-
嵌套循环
-
迭代中进行迭代,执行命令的次数是内外循环的乘积
-
常见组合
- for 嵌套for
- while 嵌套 until
- for 嵌套 while
- for 嵌套until
-
注意事项
- 外部循环执行一次,内部循环执行N次
-
-
嵌套循环处理数据
-
嵌套循环的选择使用
-
for嵌套for
- 外层for循环用于遍历每一行
- 内部for循环用于遍历每一行的每个字段
-
-
修改IFS环境变量
- 在外层for循环执行之前指定行的分隔符
- 在内层循环执行之前指定字段之间的分隔符
-
-
循环控制
-
跳出循环
-
break
-
跳出单个循环
-
跳出内部循环
-
跳出外部循环(break n)
-
注意事项
- 如果想从内部跳出外部,要明确需要跳出的循环个数,如果是两层循环,则break 2,总之,跳出n层循环,就break n
-
-
-
跳过某次循环
-
contiune
-
注意事项
- 被跳过的某次循环,后面的代码将不会被执行
-
-
-
-
常见实践
-
查找可执行文件
-
应用程序在命令行运行时,系统会去在PATH环境变量中的目录中查找具体的执行文件路径,因此我们可以通过遍历这些目录,就可以知道系统可运行的应用程序有哪些
-
实现步骤
- 遍历PATH环境变量,保存目录到变量(需要指定目录分隔符)
- 遍历目录遍历,保存文件到目录
- 判断变量(文件)是否有执行权限
- 输出结果
-
-
批量创建用户
-
通过提前把需要创建的用户信息,如userid,comment两个字段提前写入到一个.csv文件,两个字段之间用逗号分隔,然后数据文件内容重定向到while循环,while循环自动读取csv文件的每一行和每一个字段,实现满足条件则自动创建用户
-
实现步骤
-
准备user.csv数据文件
-
循环部分
-
while自动读取
while IFS=',' read -r userid,comment -
while自动创建(添加注释和家目录)
useradd -c "$comment" -m "\$userid"
-
-
数据从csv流向循环
< “$user.csv”
-
-
具体代码
-
-
input="users.csv"
while IFS=',' read -r userid name
do
echo "adding $userid"
useradd -c "$name" -m $userid
done < "$input"

浙公网安备 33010602011771号