一些比较好的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
时间: 2024-11-05 14:53:54

一些比较好的shellscript脚本的相关文章

ShellScript值传递参数

Shell传递参数 ######################################摘自菜鸟教程:http://www.runoob.com/linux/linux-shell-passing-arguments.html ##################################### 1.shell脚本传递参数 向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… #!/bin/bash e

Linux第02天

Linux 第02天 1.Linux磁盘和文件系统 VFS————虚拟文件系统 df命令————查看已挂载的分区 df 分区名 du命令————查看文件夹大小 du 文件夹名 ln命令————符号链接 fdisk命令————分区命令 fdisk 硬盘名 partprobe命令————更新分区表 partprobe 硬盘名 mkfs命令————格式化分区(新建分区只有格式化后才能使用) mkfs -t 文件系统类型(ext3.ext4) 分区名 mkfs.文件系统类型(ext3.ext4) 分区名

Ansible学习 ad-hoc命令

Ansible提供两种方式去执行命令,一种是ad-hoc命令,一种是写入Ansible playbook.类似于前者在命令行敲shell,后者是写shell-script脚本,前者解决一些简单的任务,后者执行较复杂的任务. ad-hoc命令格式:ansible <pattern_goes_here> -m <module_name> -a <arguments> pattern_goes_here:被管理的目标主机 module_name:使用的模块名,ansible中

scp &amp; 进程管理 &amp; 服务

SCP命令 -P为端口参数紧接端口参数,不要有空格,后面两个为文件路径,拷贝方向为从前向后,不区分本地与远端路径 远端路径格式:用户名@地址:远端路径 栗子: scp -P22000 ./clearLog.sh [email protected]:/root/taskBash SELinux ps -l 显示正在执行的前台程序 Tips:在执行命令的时候,尾部添加 & 该命令将会以后台形式进行执行 后台指令.切换管理 ctrl+z 前台指令运行中 可以使用 ctrl+z 将当前指令转至后台暂停

13 一个Mysql自动备份脚本

写了一个Mysql备份的脚本,大家看看,有什么不妥地方. 这是我写的第一个Shell脚本,大家帮忙看看, 有谁需要的,我可以发给他. 可以将这个脚本放进crontab,每天凌晨执行一次,自动备份 这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上. 代码: #!/bin/bash #This is a ShellScript For Auto DB Backup #Powered by aspbiz #2004-09 #Setting #设置数据库名,数据库登录名,密码,备份路径,日

磁盘清理脚本

历史原因,DB2采用归档日志,每天增加量50G左右,磁盘吃不消,而现在来说,这些归档是用不到的,古写个脚本清理磁盘空间当大于85%的时候 #!/usr/bin/ksh ########################################################### ##Author:fuwenchao ##version:1 ##time:2014-5-28 ##purpose:clear the db2 log when there is no more space ##

Linux Shell脚本与Vim常用操作笔记

本篇笔记记录最最基本的vim和shell操作. ShellScript能干什么 Shellscript类似与Windows的批处理,可以把很多指令汇总到一起,于是可以很容易地通过一个操作执行多个命令.很轻量,有效率. 在Vim中编写 Vim/Vi编辑器很强大,功能非常多,快捷键.指令更多,只需要知道最常用的就够了. Vi有3种工作模式 1.命令模式 进去之后的默认模式就是命令模式.能接受命令,但是不明文显示. 2.输入模式 命令模式按下a键就进入输入模式(还能按i.o.s等等).按Esc返回命令

数据库备份脚本

当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小. 或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么.灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统. 这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法.在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备

什么是shell脚本编程?

什么是Shell脚本 示例: #!/bin/sh cd~ mkdirshell_tut cdshell_tut for((i=0;i<10;i++));do touchtest_$i.txt done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到当前用户的home目录 第3行:创建一个目录shell_tut 第4行:切换到shell_tut目录 第5行:循环条件,一共循环10次 第6行:创建一个test_1-10.txt文件 第7行:循环体结束 cd,mkd