一些比较好的shellscript脚本
1. 变量与替换
#!/bin/bash # 变量替换 # 另外, 变量替换还有许多别的语法 # 例如, b=${a/23/bb} 将 23 替换成 bb 等等, 用到时再找 a=375 hello=$a # 注意空格 # 如果变量中有空格, 那么变量就需要被双引号括起来 hello="a b c d" echo $hello # 输出 a b c d echo ${hello} # 输出 a b c d echo "$hello" # 输出 a b c d # ------------------------------------------------- # 变量赋值 # 变量什么时候是"裸体"的即前边没有变量符号, 当它被赋值的时候, #+而不是被引用的时候. a=123 # 使用 let 赋值 let a=16+5 # 最好将 let 形式写为如下格式, 因为这样的格式会显示赋值语句是一个整体 let "a=16+5" echo $a # 显示结果是21 # 如果不使用let, 直接 a=16+5, 那么echo $a 就是 16+5 # 在 for 循环中的变量赋值 for a in 7 8 9 10 do echo -n "$a" done echo echo # 特殊的变量赋值, 把命令的结果赋值给变量 a=`ls -l` echo $a echo "$a" # 与上边的 `` 含义一样 a=$(uname -m) echo $a exit 0
2. 个人推荐的测试结构 test
#!/bin/bash # [] 单中括号 if [ $UID -ne 0 ] then echo "This is not root." fi # [[]] 双中括号 if [[ $comparison = "integer" ]] then echo "test" fi # 注意, 使用[[]], 而不是[], 能够阻止脚本中许多逻辑错误, 比如, 尽管在[]中将给出一个错误, #+但是, &&,||,<>操作还是能够工作在一个[[]]中. # 算数测试使用 (()) ((0)) # 返回 1 ((1)) # 返回 0, 这才是真 (( 5 > 4 )) # 返回 0, 这才是真 # 比较这里有很多关键参数, 比如 -e, -eq 等, 用时再确认 # 与或非 下边的等价写法 [[ condition1 && condition2 ]] if [ "$exp1" -a "$exp2" ] fi exit 0
3. 个人推荐的算术表达式
#!/bin/bash n=100 let "n++" # 101 echo $n ((n++)) # 102 echo $n exit 0
4. 清除目录下的文件
#!/bin/bash # clean up version 1 # --------------------------------------------------------------------------------- cd /tmp/log cat /dev/null > testfile echo "Log clean up." # clean up version 2 # --------------------------------------------------------------------------------- LOG_DIR=/tmp/log cd $LOG_DIR cat /dev/null > testfile echo "Log clean up." exit #clean up version 3 # --------------------------------------------------------------------------------- LOG_DIR=/tmp/log ROOT_UID=0 LINES=10 E_XCD=66 E_NOTROOT=67 if [ "$UID" -ne "$ROOT_UID" ] then echo "Must be root to run this script." exit $E_NOTROOT else echo "Yes, you are the god root." fi if [ -n "$1" ] then lines=$1 else lines=$LINES fi # E_WRONGAGRS=65 # case "$1" in # "") lines=50;; # *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGAGRS;; # *) lines=$1;; cd $LOG_DIR if [ `pwd` != "$LOG_DIR" ] then: echo "Can‘t change to $LOG_DIR." exit $E_XCD fi # 更有效的实现上边的内容. # cd /tmp/log || { # echo "Cannot change to necessary directory." >&2 # exit $E_XCD; # } tail -$lines testfile > mesg.temp mv mesg.temp message echo "Logs cleaned up." exit 0
5. 个人推荐的逻辑 与, 或
#!/bin/bash # 逻辑与 if [ condition1 ] && [ condition2 ] fi if [[ condition1 && condition2 ]] fi # 逻辑或 if [ condition1 ] || [ condition2 ] fi if [[ condition1 || condition2 ]] fi
6. 最大公约数
#!/bin/bash # 最大公约数 ARGS=2 E_BADARGS=65 # 参数检查 if [ $# -ne "$ARGS" ] then echo "Usage: `basename $0` first-number second-number" exit $E_BADARGS fi gcd() { dividend=$1 divsor=$2 remainder=1 until [ "$remainder" -eq 0 ] do let "remainder=$dividend%$divsor" dividend=$divsor divsor=$remainder done } # 另外, 有关函数调用 #+上边定义了一个函数, 然后下边调用, 将参数传递进去的办法如下 gcd $1 $2 echo; echo "GCD of $1 and $2 = $dividend"; echo exit 0
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。