Press "Enter" to skip to content

Tag: shell

shell之if语句常见错误

以下是一个错误的if语句

#!/bin/bash
oldversion=b3-cdrom
function test()
{
    if [ ! `df -h | grep $oldversion` ]; then
        echo found.
    fi
}
test

以下都是正确的:

#!/bin/bash
oldversion=b3-cdrom
function test()
{
    if [ ! "`df -h | grep $oldversion`" ]; then
        echo found.
    fi
}
test

加双引号引起来就正确了……

下面这个也是正确的:

#!/bin/bash
oldversion=3
function test()
{
    if [ ! $oldversion ]; then
        echo found.
    fi
}
test
1 Comment

Linux Shell之cut用法

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,grep、awk命令是筛选出特定的行,cut命令则是筛选出特定的列。

(1)cut命令参数
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数

-b :输入每行第n个字符(半角,注意如果有中文将乱码)。
-c :输入每行第n个字符(适用中文)。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。

(2)cut命令用法实例

Leave a Comment

Linux shell字符串截取

假设有变量 var=http://www.zhukun.net/123.htm

1,# 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.zhukun.net/123.htm

2,## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.zhukun.net/
结果是 123.htm

3,%号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.zhukun.net

Leave a Comment

Linux shell之seq用法

$ seq 1000   #起始默认是 1,间隔默认也是1
$ seq 2 1000  #间隔默认是1
$ seq 1 3 10    #从1到10,间隔为3,结果是:1 4 7 10
#!/bin/bash
for i in `seq 1 10`
do
  echo eth$i does not have a 1000 card!!
done

Linux循环遍历文件写法:

for file in `ls /etc/sysconfig/network-scripts/ifcfg-*`
do
  echo $file
done

以下是本人写的某脚本:

#!/bin/bash
for file in `ls /etc/sysconfig/network-scripts/ifcfg-*`
do
  i=${file##*-}
  #echo now checking $i
  if [ `ifconfig $i | grep 10000base | wc -l` -ge 1 ]; then
    id = `cat /proc/interrupts | grep $i | grep -v $i- | awk '{print $1}'`
    echo 'ff' > /proc/irq/${id%:*}/smp_affinity
    echo $i optimized.
  fi
done

参考文章:linux shell 动态生成 数组系列 seq使用技巧

Leave a Comment

修改shell终端提示信息

Shell终端默认只显示用户名、主机名、工作目录,有时候我们需要对Shell终端显示的信息简单调整一下,以便使工作更有效率。比如我们可以给Shell终端加上时间,以便我们计算脚本执行的时间,如下所示:

[root@localhost src]$echo $PS1
[\u@\h \W]$    #读取默认终端显示信息
[root@localhost src]$export PS1="[\u@\h \W \t]$"    #给Shell终端加上时间显示
[root@localhost src 16:19:18]$    #时间已经显示出来了

Shell终端的显示,使用到以下两个环境变量
PS1:就是用户平时的提示符。
PS2:第一行没输完,等待第二行输入的提示符。

[root@localhost src]$echo $PS1
[\u@\h \W]$    #读取默认终端显示信息

想重启后继续生效,只需要修改配置文件即可。
对于当前用户只需修改~/.bashrc,对于系统所有用户我们修改/etc/bashrc。

Leave a Comment

linux之sed用法

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法。sed命令行格式为:

sed [-nefri] ‘command’ 文件

常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。

常用command:
a∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

2 Comments