Red de conocimiento informático - Conocimiento informático - Ayuda a escribir un pequeño programa en Linux (ubuntu)

Ayuda a escribir un pequeño programa en Linux (ubuntu)

Hola~

El que dijiste que no tengo tiempo para arreglarte

Te doy este escrito en SHELL

¿Cómo hacerlo de forma remota? ¿Matar el proceso zombie?

El llamado "proceso zombie" se refiere a un proceso que está dormido y es inútil. Los procesos zombies a menudo ocurren cuando se realiza computación paralela. Como no puedo ver el "proceso zombie" usando top, escribí el siguiente archivo de shell llamado "rkill":

#!/bin/tcsh

echo "Ingrese el número de inicio del nodo: "

set N1="$<"

echo " Ingrese el número final del nodo: "

set N2="$<"

echo "Ingrese el NOMBRE del programa"

set pname="$<"

echo "************** **********************************************"

while($N1 <= $N2)

set h='t'$N1

set ppid=`rsh $h ps -ef grep $pname | | awk '{ print $2}' `

echo "rsh $h matar $ppid"

rsh $h matar $ppid

@ N1++

fin

echo "************************************ ****** *******************"

¿Cómo eliminar enlaces vacíos en un archivo de índice?

En el directorio /doc/Art_and_Photos Solo hay un número limitado de archivos en /photo/NASA-Astronomy_Picture_of_the_Day, pero hay más de dos mil archivos vinculados al archivo archivepix.html. Nuestro objetivo es eliminar los enlaces de archivos inexistentes.

#!/bin/tcsh -f

# Encuentra archivos disponibles en el directorio actual. find no admite expresiones regulares\{\}

set tmp=`find -type f -max Depth 1 -name "ap[0-9][0-9][0-9][0. -9][0-9][0-9].html" `

# Convertir el resultado de la búsqueda ./ap000303.html a ap000303.html

set ff1=`echo $tmp | sed -e 's/\.\/\(ap[0-9]\{6\}\.html\)/\1/g' `

# En el archivo archivepix Busque líneas que contengan ap000303.html similar en html e impórtelas al archivo temporal ftmp

grep 'ap[0-9]\{6\}\.html' archivepix.html >ftmp p>

# Convierta cada línea en ftmp al formato de ap000303.html, de modo que las cadenas en ff1 y ff2 tengan la misma forma.

set ff2 = ` sed -e 's/.*\(ap[0-9]\{6\}\.html\).*/\1/g' ftmp`

rm ftmp -f

# Comparar el contenido de las variables ff1 y ff2. Si una cadena solo existe en ff2, inclúyala en el archivo archivepix.html

#. Las líneas de esta cadena se eliminan.

foreach f2 ($ff2)

echo $f2

establecer bandera=0

foreach f1 ($ff1)

if ($f2 == $f1) entonces

establecer flag=1

endif

end

if( $flag == 0) entonces

sed -e '/'$f2'/d' archivepix.html >ftmp # Lo más importante de esta oración es que '$f2' se puede usar para tareas regulares. expresiones.

mv ftmp archivepix.html -f

endif

end

¿Cómo vincular todos los archivos de un directorio a una página web?

Simplemente exporte la salida del siguiente programa a un archivo y luego cópielo en la ubicación correspondiente en la página web. Lo más importante aquí es ver cómo se generan las comillas dobles (\").

#!/bin/tcsh -f

set dd = "/doc/Art_and_Photos/Flash /flash/ AGui"

set ffff = `buscar $dd -type f `

set n=0

foreach f ($ffff)

@ n++

echo $f

echo '< a href='\"$f\"'<'$n','>> AGui.html

end

¿Cómo cambiar los nombres de un montón de archivos?

En las notas del profesor Wu, se introdujo el ingenioso truco de Zhang Linbo, pero era para bash y se proporciona en forma de línea de comando, así que lo reescribí en formato tcsh y lo coloqué en un archivo de script, que es más conveniente de usar

#!/bin/. tcsh -f. # -f significa ejecutar el archivo directamente sin ejecutar .cshrc para la inicialización primero

rm tmp_file -f # Asegúrese de que el archivo no exista

para cada pliegue (* .jpg.* )

set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" ` # El mejor part

echo "mv $fold $fnew -f " >>tmp_file

end

chmod a+x tmp_file

./ tmp_file

rm tmp_file -f

En este archivo de script, la clave es la "esencia".

Su significado es: primero pase el nombre del archivo ($fold) a modificar a través de la tubería (|) al editor de secuencias (sed). El editor de secuencias procesa el nombre del archivo. El significado específico de cada elemento es:

.

set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" `

sed -e comando+ El La opción indica que se permite la edición multipunto

s/re/string/ Utilice una cadena para reemplazar la expresión regular re

/\.jpg\.\(.*\)/ “\.” Representa un punto real, "\.jpg\." representa ".jpg" en el nombre del archivo y "*" ' coincide con 0

Es completamente diferente del carácter comodín del shell, que representa 0 o más caracteres "cualquiera".

El contenido representado por ".*" se establece como "Etiqueta 1" y se puede citar con "\1" cuando sea necesario. Vale la pena señalar:

".*" no debe reemplazarse por "*", porque "*" representará cualquier número de "\.".

/-\1.jpg/ "\1" representa el contenido de la "Etiqueta 1"

g representa un reemplazo completo dentro de la línea

Hay Otro recordatorio aquí es que `echo...` ​​​​no está entre comillas simples, sino el apóstrofo marcado "~ `" en la esquina superior izquierda del teclado.

Cómo. resolver el problema de la superposición cuando las fuentes se amplían en páginas web ¿Problema?

Opción 1: Adecuado para directorios de una sola capa

#!/bin/tcsh -f

set dir=`ls .`

foreach d ($dir)

if( -d $d) then # Determinar si es un directorio

cd $d

echo "cd $d"

foreach f (*.htm *.html)

sed -e '/[0-9 ]pt/d' $f > ftmp # Eliminar todos los archivos que contengan 9pt, 12pt y otras líneas de palabras clave

mv ftmp $f -f

end

cd ..

endif

end

Opción 2: Adecuado para directorios multicapa

#!/bin/tcsh -f

set SearchPath = "/doc/Reading/ everything/Martial Arts/Liang Yusheng"

set files=`find $SearchPath -type f -name "*.htm*" `

foreach f ($archivos)

echo $f

sed -e '/[0-9]pt/d' $f > ftmp

mv ftmp $f -f

fin