惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
L
LINUX DO - 热门话题
Project Zero
Project Zero
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
Spread Privacy
Spread Privacy
S
Schneier on Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
J
Java Code Geeks
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - Franky
T
Threat Research - Cisco Blogs
D
Docker
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
Google DeepMind News
Google DeepMind News
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
月光博客
月光博客
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
V
Visual Studio Blog
AWS News Blog
AWS News Blog
I
Intezer
T
The Blog of Author Tim Ferriss
P
Privacy International News Feed
T
Tor Project blog
F
Full Disclosure
P
Proofpoint News Feed
SecWiki News
SecWiki News
H
Heimdal Security Blog
Help Net Security
Help Net Security
The Hacker News
The Hacker News

博客园 - Hicome

CentOS6 安装svn Nagios的配置文件 ZT 创建 PHP 测试页 ZT 命令行手工备份Ubuntu系统的方法 还原Ubuntu系统备份的方法 ZT DELL服务器结合nagios硬件监控、报警 ZT CentOS下内存使用率查看 ZT swf文件格式解析入门(文件头解析)ZT 怎样压缩swf文件? ZT 使用NDOUtils将Nagios监控信息存入数据库 ZT 电脑自动重启的原因几处理方法 ZT 通过rpm包安装、配置及卸载mysql ZT DVD+R与DVD-R有什么区别 ZT CentOS 5.5安装apache2.2.17 ZT CentOS 卸载apache ZT Trac 下设置发邮件问题 Centos 下PHP的卸载与安装 ZT mysql的一些操作命令 Nginx负载均衡 ZT 【M8】使用的一些小技巧 电话,短信,联系人,音乐等功能
SHELL编程实例+条件判断总结 ZT
Hicome · 2011-06-24 · via 博客园 - Hicome

文件读取

1 -- SHELL读取文件的方法

#使用read命令读取一行数据
while read myline
do
echo "LINE:"$myline
done < datafile.txt
#使用read命令读取一行数据
cat datafile.txt | while read myline
do
echo "LINE:"$myline
done
#读取一行数据
cat datafile.txt | while myline=$(line)
do
echo "LINE:"$myline
done
#读取一行数据
while myline=$(line)
do
echo "LINE:"$myline
done < datafile.txt
#使用read命令读取变量数据
cat datafile.txt | while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done
#使用read命令读取变量数据
while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done < datafile.txt

2 -- read命令的使用方法

read命令从标准输入读取一行,并把输入行的每个字段(以指定的分隔符分隔)的值赋给命令行上的变量。

read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...] 

参数解析: 

-e 
-r指定读取命令把“\”(反斜杠)做为输入行的一个普通字符,而非控制字符。
-s安静模式。如果指定该参数且从终端读入数据,那么输入的时候将不回显在屏幕上。
-u <fd>指定读入数据的文件描述符,不再使用默认的标准输入。
-t <timeout>等待标准输入的超时时间,单位为秒。如果在指定的时间内没有输入,即时返回。
-p <prompt>打印提示符,等待输入,并将输入赋值给REPLY变量或者指定的变量。
-a <array>读入一组词,依次赋值给数组array。
-n <nchars>读取指定的字符数。如果已读取n个字符,马上返回,下次从返回点继续读取;如果已到行结束,无论满不满足n个字符都返回。
-d <delim>指定行结束符,读到该字符就当做一行的结束。
name ...指 定read变量。read读取一行数据后,分隔行数据为各个字段,然后将字段依次赋给指定的变量。如果分隔后的字段数目比指定的变量多,那么将把剩余的全 部字段值都赋给最后的那个变量;反之,剩余的变量被赋值为空字符串。如果read没有指定变量,系统使用默认的REPLY作为缺省变量名。

使用重定向读取数据

exec 6< datafile.txt
while read -u 6 myline
do
echo "LINE:"$myline
done

变量分隔符 
read命令默认的分隔符是空格,多个空格被当做一个空格处理。我们也可以使用IFS(内部字段分隔符)指定的的字符作为分隔符。假如有如下内容的一个文件,它以“$”来分隔变量,希望把每个变量区别开来,可以使用如下脚本: 

baidu$google$tencnt$sina
123456789
#使用read命令读取变量数据
while read paraa parab parac parad
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
echo "PARAD:"$parad
done < datafile.txt

执行脚本的输出如下:

PARAA:baidu
PARAB:google
PARAC:tencent
PARAD:sina
PARAA:123456789
PARAB:
PARAC:
PARAD:

3 -- 参考资料

1、http://www.linuxsense.org/archives/63.html 

如何使用read命令读取文件的每一行

下面是一个简单的例子程序,展示如何用read命令读取文件的每一行,并且把它输出到控制台。
如果没有输入文件,那么自身的shell文件将被使用
#!/bin/sh

if [ $# -gt 1  ]; then
    echo "Usage: $0 [FileName]"
    exit 1
elif [ $# -eq 1 ]; then
    MY_FILE=$1
else
    MY_FILE=$0
fi

if [ ! -f $MY_FILE ]; then
    echo "$MY_FILE does not exist!"
    exit 2
fi

MY_LINE_NO=1
while read MY_LINE
do
    printf "%5.5d: $MY_LINE\n" $MY_LINE_NO
    MY_LINE_NO=$((MY_LINE_NO+1))
done < $MY_FILE

---------------------------------------------

       

原文地址 http://blog.chinaunix.net/u/29141/showart_372963.html 

shell的数组

Bash中,数组变量的赋值有两种方法:

  (1) name = (value1 ... valuen) 此时下标从0开始

  (2) name[index] = value

  下面以一个简单的脚本来说明,脚本内容如下:

  #!/bin/bash

  #定义数组

  A=(a b c def)

  #把数组按字符串显示输出

  echo ${A[@]}

  #屏幕显示:a b c def

  #数组的长度表示${#A[*]}

  len=${#A[*]}

  echo ${#A[*]}

  #屏幕显示:4

  #改变数组元素的值

  A[3]='vivian'

  echo ${A[*]}

  #屏幕显示:a b c vivian

  #循环输出数组元素

  i=0

  while [ $i -lt $len ]

  do

  echo ${A[$i]}

  let i++

  done

  #屏幕输出:

  #      a

  #       b

  #      c

  #     vivian

  #循环输出数组元素的另一种写法,注意,在条件中,引用变量一定要用双引号 ,否则报错

  for (( j=0; j<"$len"; j=j+1 ))

  do

  echo ${A[$j]}

  done

  #循环输出数组元素的另一种写法,注意,${A[*]}不能写成$A ,$A默认是第一个元素,如果A="a b c ded",就可以写$A

  for value in ${A[*]}

  do

  echo $value

  done

----------------------------------------------------------

shell遍历目录

#!/bin/sh

for file in ./*               遍历的文件是当前目录,其他目录可以通过修改这个参数来实现
do
if test -f $file
then
    echo $file
    echo 是文件
fi
if test -d $file
then
    echo $file
    echo 是目录
fi
done

----------------------------------------------------------

cd .

myfun()
{        

        for i in `ls`
        do
                if [ -f $i ] ; then
                        echo $i
#                       string=`cat $i | grep "keyword"`
#                        if [ "$string" ] ; then
#                                echo "$PWD/$i"    #找到了包含关键字的文件
#                                #echo "Debug: $PWD/$i is a file and find the keyword in the file!!"
#                        fi
#                        #echo "Debug: $PWD/$i is a file and doesn't find the keyword in the file!!"
                else
                        #echo "Debug: $PWD/$i is a directory!!"
                        if [ -d $i ] ; then    #ls命令会导致一些不存在的文件出现,需要剔除
                                cd $i
                                myfun
                                cd ..
                        else
                                echo "$PWD/$i is not existence!"
                        fi
                fi
                #echo "$PWD done"
        done
}

myfun

还可以用basename $i, dirname $i来打印文件名和路径

-----------------------
#!/bin/sh

# 定义一个方法
foreachd(){
# 遍历参数1
for file in $1/*
do
# 如果是目录就打印处理,然后继续遍历,递归调用
        if [ -d $file ]; then
                echo $file
                foreachd $file
        fi
done
}

# 执行,如果有参数就遍历指定的目录,否则遍历当前目录
echo "parameter in = $#"
echo "parameter 0= $0"
echo "parameter 1= $1"
echo "parameter 2= $2"

if [ $# -gt "0" ];then
        echo "p1 > 0"
    foreachd "$1"
else
    foreachd "."
fi

Shell 条件判断总结

时间:2007-08-03 10:53:18  来源:Linux联盟收集整理  作者:

UNIX Shell 编程

一些条件判断 总结

-b file            若文件存在且是一个块特殊文件,则为真
-c file            
若文件存在且是一个字符特殊文件,则为真
-d file            
若文件存在且是一个目录,则为真
-e file            
若文件存在,则为真
-f file            
若文件存在且是一个规则文件,则为真
-g file            
若文件存在且设置了SGID位的值,则为真
-h file            
若文件存在且为一个符合链接,则为真
-k file            
若文件存在且设置了"sticky"位的值
-p file            
若文件存在且为一已命名管道,则为真
-r file            
若文件存在且可读,则为真
-s file            
若文件存在且其大小大于零,则为真
-u file            
若文件存在且设置了SUID位,则为真
-w file            
若文件存在且可写,则为真
-x file            
若文件存在且可执行,则为真
-o file            
若文件存在且被有效用户ID所拥有,则为真

-z string          string长度为0,则为真
-n string          
string长度不为0,则为真
string1 = string2  
若两个字符串相等,则为真
string1 != string2 
若两个字符串不相等,则为真

int1 -eq int2      int1等于int2,则为真
int1 -ne int2      
int1不等于int2,则为真
int1 -lt int2      
int1小于int2,则为真
int1 -le int2      
int1小于等于int2,则为真
int1 -gt int2      
int1大于int2,则为真
int1 -ge int2      
int1大于等于int2,则为真

!expr              expr为假则复合表达式为真。expr可以是任何有效的测试表达式
expr1 -a expr2     
expr1expr2都为真则整式为真
expr1 -o expr2     
expr1expr2有一个为真则整式为真

特殊变量

$0                 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n                 
该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2...)
$#                 
提供脚本的参数号

$*                 
所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@                 
所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于
$1$2
$?                 
前一个命令执行后的退出状态

$$                 
当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$!                 
前一个后台命令的进程号