hylan:shell脚本鸡肋--结构化命令(续)
2018-03-21 18:58
405 查看
循环处理数据效果:
marvin@marvin-pc:~$ cat /etc/passwd | grep marvin
marvin:x:1000:1000:marvin,,,:/home/marvin:/bin/bash
marvin@marvin-pc:~$ ifs=$IFS
marvin@marvin-pc:~$ IFS=:
marvin@marvin-pc:~$ for haha in $(cat /etc/passwd | grep marvin)
> do
> echo "this is $haha"
> done
this is marvin
this is x
this is 1000
this is 1000
this is marvin,,,
this is /home/marvin
this is /bin/bash
嵌套循环处理文件数据:
#!/bin/bash
#_*_coding:utf-8_*_
#写个程序拆分/etc/passwd文件中的数据
IFS_old=$IFS
IFS=$'\n'
for split_out in $(cat /etc/passwd)
do
echo "文件中的数据 $split_out"
IFS=:
for split_in in $split_out
do
echo " $split_in"
done
done
IFS=$IFS_old
查找可执行文件
#!/bin/bash
#_*_coding: utf-8_*_
#查找可执行的文件
IFS_old=$IFS
IFS=:
for folder in $PATH
do
echo "$folder:"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
一次性创建多个系统用户
#!/bin/bash
#_*_coding: utf-8_*_
#通过文件一次性创建多个账号
input="users.csv"
while IFS=',' read -r userid name
do
echo "新增用户:$userid"
useradd -c "$name" -m $userid
done < "$input"
读取.csv文件,创建insert语句
csv文件内容如下:
marvin@marvin-pc:~/hylan$ cat members.csv
Blum,Richard,123 Main St.,Chicago,IL,60601
Blum,Barbara,123 Main St.,Chicago,IL,60601
Bresnahan,Christine,456 Oak Ave,Columbus,OH,43201
Bresnahan,Timothy,456 Oak Ave,Columbus,OH,43201
marvin@marvin-pc:~/hylan$ cat sql_test
#!/bin/bash
outfile='members.sql'
IFS=','
while read lname fname address city state zip
do
cat >> $outfile << EOF
insert into members(lname,fname,address,city,state,zip) values
('$lname','$fname','$address','$city','$state','$zip');
EOF
done
执行脚本:marvin@marvin-pc:~/hylan$ ./sql_test < members.csv
执行结果:marvin@marvin-pc:~/hylan$ cat members.sql
insert into members(lname,fname,address,city,state,zip) values
('Blum','Richard','123 Main St.','Chicago','IL','60601');
insert into members(lname,fname,address,city,state,zip) values
('Blum','Barbara','123 Main St.','Chicago','IL','60601');
insert into members(lname,fname,address,city,state,zip) values
('Bresnahan','Christine','456 Oak Ave','Columbus','OH','43201');
insert into members(lname,fname,address,city,state,zip) values
('Bresnahan','Timothy','456 Oak Ave','Columbus','OH','43201');
insert into members(lname,fname,address,city,state,zip) values
('','','','','','');
注意最后多了一行空值。可能需要手动处理一下。之所以会产生这条空行,是因为members.csv文件我不是用vim创建的文件,手工打开的编辑器,误留了空行(比较容易无意中留空行),如果是用vim编辑器创建的文件(不容易误留空行),没有放空行就不会出现这种空行。
marvin@marvin-pc:~$ cat /etc/passwd | grep marvin
marvin:x:1000:1000:marvin,,,:/home/marvin:/bin/bash
marvin@marvin-pc:~$ ifs=$IFS
marvin@marvin-pc:~$ IFS=:
marvin@marvin-pc:~$ for haha in $(cat /etc/passwd | grep marvin)
> do
> echo "this is $haha"
> done
this is marvin
this is x
this is 1000
this is 1000
this is marvin,,,
this is /home/marvin
this is /bin/bash
嵌套循环处理文件数据:
#!/bin/bash
#_*_coding:utf-8_*_
#写个程序拆分/etc/passwd文件中的数据
IFS_old=$IFS
IFS=$'\n'
for split_out in $(cat /etc/passwd)
do
echo "文件中的数据 $split_out"
IFS=:
for split_in in $split_out
do
echo " $split_in"
done
done
IFS=$IFS_old
查找可执行文件
#!/bin/bash
#_*_coding: utf-8_*_
#查找可执行的文件
IFS_old=$IFS
IFS=:
for folder in $PATH
do
echo "$folder:"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
一次性创建多个系统用户
#!/bin/bash
#_*_coding: utf-8_*_
#通过文件一次性创建多个账号
input="users.csv"
while IFS=',' read -r userid name
do
echo "新增用户:$userid"
useradd -c "$name" -m $userid
done < "$input"
读取.csv文件,创建insert语句
csv文件内容如下:
marvin@marvin-pc:~/hylan$ cat members.csv
Blum,Richard,123 Main St.,Chicago,IL,60601
Blum,Barbara,123 Main St.,Chicago,IL,60601
Bresnahan,Christine,456 Oak Ave,Columbus,OH,43201
Bresnahan,Timothy,456 Oak Ave,Columbus,OH,43201
marvin@marvin-pc:~/hylan$ cat sql_test
#!/bin/bash
outfile='members.sql'
IFS=','
while read lname fname address city state zip
do
cat >> $outfile << EOF
insert into members(lname,fname,address,city,state,zip) values
('$lname','$fname','$address','$city','$state','$zip');
EOF
done
执行脚本:marvin@marvin-pc:~/hylan$ ./sql_test < members.csv
执行结果:marvin@marvin-pc:~/hylan$ cat members.sql
insert into members(lname,fname,address,city,state,zip) values
('Blum','Richard','123 Main St.','Chicago','IL','60601');
insert into members(lname,fname,address,city,state,zip) values
('Blum','Barbara','123 Main St.','Chicago','IL','60601');
insert into members(lname,fname,address,city,state,zip) values
('Bresnahan','Christine','456 Oak Ave','Columbus','OH','43201');
insert into members(lname,fname,address,city,state,zip) values
('Bresnahan','Timothy','456 Oak Ave','Columbus','OH','43201');
insert into members(lname,fname,address,city,state,zip) values
('','','','','','');
注意最后多了一行空值。可能需要手动处理一下。之所以会产生这条空行,是因为members.csv文件我不是用vim创建的文件,手工打开的编辑器,误留了空行(比较容易无意中留空行),如果是用vim编辑器创建的文件(不容易误留空行),没有放空行就不会出现这种空行。
相关文章推荐
- hylan:shell脚本鸡肋--结构化命令
- linux命令行与shell脚本大全_第十一章_结构化命令
- hylan:shell脚本鸡肋--基本脚本
- SHELL脚本的基础知识3——更多结构化命令
- SHELL脚本的基础知识3——更多结构化命令
- Shell脚本编程基础 三 使用结构化命令
- SHELL脚本的基础知识2——使用结构化命令
- Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif
- Shell脚本编程基础 四 更多的结构化命令
- shell脚本编程-使用结构化命令(if/else)(转)
- shell脚本---构建基础脚本和结构化命令
- shell脚本编程基础(二)----使用结构化命令
- SHELL脚本的基础知识2——使用结构化命令
- Shell脚本编程之结构化命令
- Linux命令行与shell脚本(8)--结构化命令
- Shell脚本--结构化命令
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
- Linux 下Shell 脚本几种基本命令替换区别
- shell脚本表达式计算命令bc和限定计算结果小数位数
- vim独家秘技两条(1)在任意列中插入等差数列(非插件)(2)利用shell命令插入某个目录下的所有文件名(可用于cocos2d-x android的.mk脚本配置)(下)