linuxshell高级技巧

发布 2021-05-16 21:00:28 阅读 7761

linux shell高级技巧。

该系列将重点介绍linux

shell中的高级使用技巧,其主要面向有一定经验的shell开发者、linux系统管理员,以及linux的爱好者。博客中的示例主要**于网络和一。

些经典书籍,在经过本人的收集和整理之后,以系列博客的形式呈现给诸位。如果大家有更多更好的shell脚本经典示例,且愿意在这里与我们一同分享的话,可以以邮件、博客回复等形式与我联系,我将会尽量保证该系列的持续更新。一、将输入信息转换为大写字符后再进行条件判断:

我们在读取用户的正常输入后,很有可能会将这些输入信息用于条件判断,那么在进行比较时,我们将不得不考虑这些信息的大小写匹配问题。 /cat >

#!/bin/sh

echo -n "please let me know your name. "

read name

#将变量name的值通过管道输出到tr命令,再由tr命令进行大小写转换后重新赋值给name变量。

name=`echo $name | tr [a-z] [a-z]`

if [[name ==stephen" ]then

echo "hello, stephen."

elseecho "you are not stephen."

fictrl+d

please let me know your name. stephen

hello, stephen.二、为调试信息设置输出级别:

我们经常在调试脚本时添加一些必要的调试信息,以便跟踪到程序中的错误。在完成调试后,一般都会选择删除这些额外的调试信息,在过了一段时间之后,如果脚。

本需要添加新的功能,那么我们将不得不重新进行调试,这样又有可能需要添加这些调试信息,在调试成功之后,这些信息可能会被再次删除。如果我们能够为我们。

的调试信息添加调试级别,使其只在必要的时候输出,我想这将会是一件非常惬意的事情。

/> cat >

#!/bin/sh

if0 ]]then

echo "usage: .d debug_level"

exit 1

fi#1. 读取脚本的命令行选项参数,并将选项赋值给变量argument。

while getopts d: argument

do2. 只有到选项为d(-d)时有效,同时将-d后面的参数($optarg)赋值给变量debug,表示当前脚本的调试级别。

case $argument in

d) debug_level=$optarg ;;

echo "usage: .d debug_level"

exit 1

esacdone

#3. 如果debug此时的值为空或者不是0-9之间的数字,给debug变量赋缺省值0.

if [[z $debug_level ||debug_level !=0-9] ]then

debug_level=0

fiecho "the current debug_level level is $debug_level."

echo -n "tell me your name."

read name

name=`echo $name | tr [a-z] [a-z]`

if [ name = stephen" ]then

4. 根据当前脚本的调试级别判断是否输出其后的调试信息,此时当debug_level > 0时输出该调试信息。

test $debug_level -gt 0 &&echo "this is stephen."

do something you want here.

elif [ name = ann" ]then

5. 当debug_level > 1时输出该调试信息。

test $debug_level -gt 1 &&echo "this is ann."

do something you want here.

else6. 当debug_level > 2时输出该调试信息。

test $debug_level -gt 2 &&echo "this is others."

do any other else.

fictrl+d

usage: .d debug_level

/> d 1

the current debug level is 1.

tell me your name. ann

/> d 2

the current debug level is 2.

tell me your name. ann

this is ann.三、判断参数是否为数字: 有些时候我们需要验证脚本的参数或某些变量的值是否为数字,如果不是则需要需要给出提示,并退出脚本。

/> cat >

#!/bin/sh

#1. $1是脚本的第一个参数,这里作为awk命令的第一个参数传入给awk命令。

#2. 由于没有输入文件作为输入流,因此这里只是在begin块中完成。

#3. 在awk中ar**数组表示awk命令的参数数组,ar**[0]表示命令本身,ar**[1]表示第一个参数。

#4. match是awk的内置函数,返回值为匹配的正则表达式在字符串中(ar**[1])的起始位置,没有找到返回0。

#5. 正则表达式的写法已经保证了匹配的字符串一定是十进制的正整数,如需要浮点数或负数,仅需修改正则即可。

#6. awk执行完成后将结果返回给isdigit变量,并作为其初始化值。

#7. isdigit=`echo $1 | awk ''

#8. 上面的写法也能实现该功能,但是由于有多个进程参与,因此效率低于下面的写法。

isdigit=`awk 'begin ' 1`

if [[isdigit ==true" ]then

echo "this is numeric variable."

number=$1

elseecho "this is not numeric variable."

number=0

fictrl+d

this is numeric variable.

/> 12r

this is not numeric variable.四、判断整数变量的奇偶性: 为了简化问题和突出重点,这里我们假设脚本的输入参数一定为合法的整数类型,因而在脚本内部将不再进行参数的合法性判断。

/> cat >

#!/bin/sh

#这里的重点主要是sed命令中正则表达式的写法,它将原有的数字拆分为两个模式(用圆括号拆分),一个前面的所有高位数字,另一个是最后一位低位数字,之。

后再用替换符的方式(\2),将原有数字替换为只有最后一位的数字,最后将结果返回为last_digit变量。

last_digit=`echo $1 | sed 's2/'`

#2. 如果last_digit的值为0,2,4,6,8,就表示其为偶数,否则为奇数。

case $last_digit in

echo "this is an even number."

echo "this is not an even number."

esacctrl+d

this is an even number.

AutoCAD高级技巧

1 autocad的图形格式为。dwg,也可导出为。bmp及 wmf 或。eps dxf 3ds,如果用render命令可存为 pcx tga tif格式,autocad还可将文件直接存为这几种格式,要为系统装一个名为 raster file export 的打印机,用它打印到文件,acad2000...

AutoCAD高级技巧

1 autocad的图形格式为。dwg,也可导出为。bmp及 wmf 或。eps dxf 3ds,如果用render命令可存为 pcx tga tif格式,autocad还可将文件直接存为这几种格式,要为系统装一个名为 raster file export 的打印机,用它打印到文件,acad2000...

AutoCAD高级技巧

1 autocad的图形格式为。dwg,也可导出为。bmp及 wmf 或。eps dxf 3ds,如果用render命令可存为 pcx tga tif格式,autocad还可将文件直接存为这几种格式,要为系统装一个名为 raster file export 的打印机,用它打印到文件,acad2000...