#!/bin/bash
set -o nounset
##############################################################
# ASSIGNMENT DUE NOV m19/t20
# Allow for blank lines in the file
# Allow for comments in the file that start tih '#'
# Validate ssn with regex
# Log SIG, line numbers, filename, and bad ssn
# Validat domain with regex (lowercase and digits)
# Log SIG, line number, filename, and bad ip
# add domain name and ip to /etc/hosts only when required
# (Always use fullly qualified paths in bash scripts)
# regex files should be in /root/scripts/regex/
##############################################################
# Script to check for errors and then print to screen
args_expected=1
if [ ${#} -ne ${args_expected} ]
then
echo "Usage error: expected ${args_expected}, got ${#}"
echo "Exiting"
exit
fi
IFS_save=$IFS
IFS=','
user_cnt=0
#Script to make usernames for the users in the file
while read lastname firstname midname ssn domain ip;
do
username=${firstname:0:1}${midname:0:1}${lastname}
echo "user_cnt=${user_cnt} username: $username"
echo $lastname $firstname $midname $ssn $domain $ip;
let ++user_cnt
#Allows blank line within files
if [ "${lastname}" = " " ]
then
#needs to skip over the blank line and not to count it as a user
else
continue
fi
done < ${1}
IFS=$IFS_save
该程序还有很多要做的工作,但现在我需要有关注释和空白行的帮助。
每当我在示例文件中使用该程序时,我都会不断添加空白行作为用户。
我尝试使用grep -o awk -F和sed regex选项来删除/忽略空行,但是在形式上,我拥有if语句,它所做的就是读取空行并将其添加到用户计数中
答案 0 :(得分:0)
在增加user_cnt
之前,在 之前输入空白的用户名或注释。并在这种情况下使用continue
,而不是非空白的情况。
" "
不是空的用户名,而是包含空格字符的用户名。空字符串为""
。
#!/bin/bash
set -o nounset
##############################################################
# ASSIGNMENT DUE NOV m19/t20
# Allow for blank lines in the file
# Allow for comments in the file that start tih '#'
# Validate ssn with regex
# Log SIG, line numbers, filename, and bad ssn
# Validat domain with regex (lowercase and digits)
# Log SIG, line number, filename, and bad ip
# add domain name and ip to /etc/hosts only when required
# (Always use fullly qualified paths in bash scripts)
# regex files should be in /root/scripts/regex/
##############################################################
# Script to check for errors and then print to screen
args_expected=1
if [ ${#} -ne ${args_expected} ]
then
echo "Usage error: expected ${args_expected}, got ${#}"
echo "Exiting"
exit
fi
IFS_save=$IFS
IFS=','
user_cnt=0
#Script to make usernames for the users in the file
while read lastname firstname midname ssn domain ip;
do
# Check for blank or comment
if [[ $lastname = "" || $lastname = "#"* ]]
then
continue
fi
username=${firstname:0:1}${midname:0:1}${lastname}
echo "user_cnt=${user_cnt} username: $username"
echo $lastname $firstname $midname $ssn $domain $ip;
let ++user_cnt
done < ${1}
IFS=$IFS_save
我使用以下CSV文件进行了测试:
margolin,barry,w,104500034,margolin.com,1.2.3.4
#foobar
jones,james,e,123455667,foobar.com,1.1.1.1
输出为:
user_cnt=0 username: bwmargolin
margolin barry w 104500034 margolin.com 1.2.3.4
user_cnt=1 username: jejones
jones james e 123455667 foobar.com 1.1.1.1