shell---shell小例子

转自:http://www.csdn.net/article/2013-08-15/2816581-What-I-learned-from-other-s-shell-scripts

作者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)
  
function red() {
     echo -e "$RED$*$NORMAL"
}
  
function green() {
     echo -e "$GREEN$*$NORMAL"
}
  
function yellow() {
     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
function debug() {
     if [[ $DEBUG ]]
     then
         echo ">>> $*"
     fi
}
  
# For any debug message
debug "Trying to find config file"

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

1
2
3
# From cool geeks at hacker news
function debug() { ((DEBUG)) && echo ">>> $*" ; }
function debug() { [ "$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
  
function require_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
function require_curl() { which "curl" &>/dev/ null ; }
function require_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 << EOF
  
Usage: myscript <command> <arguments>
  
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

 

shell脚本中,-f和-z是两个常用的条件判断语句。 -f用于判断文件是否存在。如果指定的文件存在,则条件为真;如果文件不存在,则条件为假。例如,如果我们有一个文件/etc/sysconfig/network,并且我们想要在脚本中检查该文件是否存在,可以使用以下条件判断语句: ``` if [ -f /etc/sysconfig/network ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在/etc/sysconfig/network文件存在时执行其中的代码。 -z用于判断字符串是否为空。如果指定的字符串为空,则条件为真;如果字符串不为空,则条件为假。例如,如果我们有一个变量$HOSTNAME,并且我们想要在脚本中检查该变量是否为空,可以使用以下条件判断语句: ``` if [ -z "$HOSTNAME" ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在$HOSTNAME为空时执行其中的代码。 综合上述两个条件判断,如果我们想要检查$HOSTNAME是否为空或者为"(none)",可以使用以下条件判断语句: ``` if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在$HOSTNAME为空或者为"(none)"时执行其中的代码。 需要注意的是,在条件判断语句中,`-o`表示逻辑或(or),`-a`表示逻辑与(and)。在这个例子中,我们使用了逻辑或(-o)来判断$HOSTNAME是否为空或者为"(none)"。如果要使用逻辑与,可以使用`-a`来替代`-o`。 另外,引用、和分别提供了关于如何使用这些条件判断语句的示例代码。通过这些示例代码,你可以更好地理解如何在实际的shell脚本中应用这些条件判断语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值