我从其他Shell脚本中学到了什么?

来源: CSDN
   作者Fizer Khan是一位Shell脚本迷,他对有关Shell脚本新奇有趣的东西是如此的痴迷。最近他遇到了authy-ssh脚本,为了缓解ssh服务器双重认证问题,他学到了许多有用且很酷的东西。对此,他想分享给大家。

一、Colors your echo 

大多数情况下,你希望输出echo Color,比如绿色代表成功,红色代表失败,黄色代表警告。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

NORMAL=$(tput sgr0)

GREEN=$(tput setaf 2;tput bold)

YELLOW=$(tput setaf 3)

RED=$(tput setaf 1)

functionred() {

echo -e "$RED$*$NORMAL"

}

functiongreen() {

echo -e "$GREEN$*$NORMAL"

}

functionyellow() {

echo -e "$YELLOW$*$NORMAL"

}

# To print success

green "Task has been completed"

# To print error

red "The configuration file does not exist"

# To print warning

yellow "You have to use higher version."

这里使用tput来设置颜色、文本设置并重置到正常颜色。想更多了解tput,请参阅prompt-color-using-tput

二、To print debug information (打印调试信息)

打印调试信息只需调试设置flag。

1

2

3

4

5

6

7

8

9

functiondebug() {

if[[ $DEBUG ]]

then

echo ">>>$*"

fi

}

# For any debug message

debug "Trying to find config file"

某些极客还会提供在线调试功能:

1

2

3

# From cool geeks at hacker news

functiondebug() { ((DEBUG)) &&echo ">>>$*";}

functiondebug() { [ "$DEBUG"] &&echo ">>>$*";}

三、To check specific executable exists or not (检查特定可执行的文件是否存在)

1

2

3

4

5

6

7

8

9

10

11

12

OK=0

FAIL=1

functionrequire_curl() {

which curl &>/dev/null

if[ $? -eq 0 ]

then

return$OK

fi

return$FAIL

}

这里使用which来命令查找可执行的curl 路径。如果成功,那么可执行的文件存在,反之则不存在。将&>/dev/null设置在输出流中,错误流会显示to /dev/null (这就意味着在控制板上没有任何东西可打印)。

有些极客会建议直接通过返回which来返回代码。

1

2

3

# From cool geeks at hacker news

functionrequire_curl() { which "curl"&>/dev/null;}

functionrequire_curl() { which -s "curl";}

四、To print usage of scripts  (打印使用的脚本)

当我开始编写shell 脚本,我会用echo来命令打印已使用的脚本。当有大量的文本在使用时, echo命令会变得凌乱,那么可以利用cat来设置命令。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

cat <

Usage: myscript

VERSION: 1.0

Available Commands

install - Install package

uninstall - Uninstall package

update - Update package

list - List packages

EOF

这里的<<被称为<<here document,字符串在两个EOF中。

五、User configured value vs Default value (用户配置值VS 默认值)

有时,如果用户没有设置值,那么会使用默认值。

1

URL=${URL:-http://localhost:8080}

检查URL环境变量。如果不存在,可指定为localhost。

六、To check the length of the string 检查字符串长度

1

2

3

4

5

if[ ${#authy_api_key} != 32 ]

then

red "you have entered a wrong API key"

return$FAIL

fi

利用 ${#VARIABLE_NAME} 定义变量值的长度。

七、To read inputs with timeout (读取输入超时)

1

2

3

4

5

6

7

8

READ_TIMEOUT=60

read -t "$READ_TIMEOUT"input

# if you do not want quotes, then escape it

input=$(sed "s/[;\`\"\$\' ]//g"<<<$input)

# For reading number, then you can escape other characters

input=$(sed 's/[^0-9]*//g' <<<$input)

八、To get directory name and file name  (获取目录名和文件名)

1

2

3

4

5

6

7

8

# To find base directory

APP_ROOT=`dirname "$0"`

# To find the file name

filename=`basename "$filepath"`

# To find the file name without extension

filename=`basename "$filepath".html`

英文出自:FizerKhan


时间:2013-08-20 10:43 来源: CSDN 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量