![echo와 fsck를 사용하여 출력 값을 결합하는 방법](https://linux55.com/image/208644/echo%EC%99%80%20fsck%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%B6%9C%EB%A0%A5%20%EA%B0%92%EC%9D%84%20%EA%B2%B0%ED%95%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
파티션 태그만 사용하여 기능적인 스크립트를 만들고, 태그를 가져오고, 태그에서 장치를 가져오고, fsck -fy
각 파티션에 두 번 전달하려고 합니다.
#!/usr/bin/env bash
# Filter partition by label : except "Inukaze", "LUBUNTU" & "72GB"
Etiqueta=($(ls -l /dev/disk/by-label | grep -v "Inukaze" | grep -v "LUBUNTU" | grep -v "72GB" | awk '{print $9}'))
# Set array list using the labels for get device
Particion=($(for i in "${Etiqueta[@]}" ; do blkid -L "$i" ; done))
# And the part i need help :
for ((i=0; i<${#Etiqueta[@]}; i++)); do echo -e "\nExaminando : ""${Etiqueta[i]} (${Particion[i]})" & fsck -fy ${Particion[@]} & fsck -fy ${Particion[@]} ; done
출력 ls -l /dev/disk/by-label | grep -v "Inukaze" | grep -v "LUBUNTU" | grep -v "72GB" | awk '{print $9}'
:
1SlackIni
Compartido
Slack32
Slack64
Tactinu1
Tactinu1-Inicio
Tactinu1-Slack32
Tactinu1-Slack64
for i in "${Etiqueta[@]}" ; do blkid -L "$i" ; done
" "출력
/dev/sda1
/dev/sdb1
/dev/sdb6
/dev/sdb5
/dev/sdc1
/dev/sdc2
/dev/sdc4
/dev/sdc3
출력 for ((i=0; i<${#Etiqueta[@]}; i++)); do echo -e "\nExaminando : ""${Etiqueta[i]} (${Particion[i]})" & fsck -fy ${Particion[@]} & fsck -fy ${Particion[@]} ; done
:
Examinando : 1SlackIni (/dev/sda1)
[2] 5199
fsck from util-linux 2.27.1
fsck from util-linux 2.27.1
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sda1 está en uso.
e2fsck: No se puede continuar, se finaliza.
Paso 1: Verificando nodos-i, bloques y tamaños
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
fsck.ext3: Device or resource busy mientras se intentaba abrir /dev/sdb1
¿Sistema de ficheros montado o abierto en exclusiva por otro programa?
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
1SlackIni: 977/65536 ficheros (24.8% no contiguos), 114672/262144 bloques
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
fsck.ext3: Device or resource busy mientras se intentaba abrir /dev/sdb6
¿Sistema de ficheros montado o abierto en exclusiva por otro programa?
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sdb5 está en uso.
e2fsck: No se puede continuar, se finaliza.
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sdc1 está en uso.
e2fsck: No se puede continuar, se finaliza.
Paso 1: Verificando nodos-i, bloques y tamaños
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sdc2 está en uso.
e2fsck: No se puede continuar, se finaliza.
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sdc4 está en uso.
e2fsck: No se puede continuar, se finaliza.
e2fsck 1.42.13 (17-May-2015)
e2fsck 1.42.13 (17-May-2015)
/dev/sdc3 está en uso.
e2fsck: No se puede continuar, se finaliza.
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 1: Verificando nodos-i, bloques y tamaños
Tactinu1-Inicio: 11/133824 ficheros (0.0% no contiguos), 9196/535296 bloques
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
Tactinu1-Slack64: 1450/1966560 ficheros (49.7% no contiguos), 5377699/7865600 bloques
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
Tactinu1-Slack32: 27765/1966080 ficheros (10.0% no contiguos), 5993183/7863808 bloques
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
Tactinu1: 81725/5709824 ficheros (25.0% no contiguos), 20667299/22807552 bloques
예상 출력: fsck가 일반적으로 "Paso 1"을 출력한 후 첫 번째 echo는 "Examinando: $Etiqueta ($Particion)"을 출력합니다.
Examinando : 1SlackIni (/dev/sda1)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
1SlackIni: 977/65536 ficheros (24.8% no contiguos), 114672/262144 bloques
[fsck가 완료되기 전에 기다리세요]
Examinando : 1SlackIni (/dev/sda1)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
1SlackIni: 977/65536 ficheros (24.8% no contiguos), 114672/262144 bloques
[네, 두 번 했어요 왜냐하면 이 일을 두 번 했거든요]
Examinando Compartido (/dev/sdb1)
fsck from util-linux 2.27.1
e2fsck 1.42.13 (17-May-2015)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
Compartido: 1105544/39321600 ficheros (27.2% no contiguos), 149013032/157286400 bloques
출력이 매우 깁니다.
답변1
첫 번째,안 돼요구문 분석 - 출력은 ls
결코 안정적으로 작동하지 않습니다. 실패를 유발할 수 있는 것들이 너무 많습니다. find ... -print0
및를 사용하여 mapfile
배열을 채웁니다.
예를 들어
# Get all symlinks in /dev/disk/by-label/ except those
# containing Inukaze or LUBUNTU in the name. Use NUL
# as the filename separator so it will work with ANY
# filename, even those containing annoying characters like
# spaces or shell metacharacters.
mapfile -d '' -t Etiqueta < <(
find /dev/disk/by-label/ -type l \
! -name '*Inukaze*' \
! -name '*LUBUNTU*' \
-print0)
# now loop over those symlinks
for f in "${Etiqueta[@]}" ; do
# label name without path
label="${f/*\//}"
# get the real path of the symlink
rp="$(realpath "$f")"
# skip those that aren't block devices
[ -b "$rp" ] || continue
# skip block devs with size 72GB. Strip leading and
# trailing spaces from lsblk's output with sed.
size=$(lsblk -n -o size "$rp" | sed -E -e 's/^ *| *$//g')
[ "$size" = "72G" ] && continue
# Now do whatever you need to with "$rp".
# Remember to always double-quote your variable expansions.
# Use printf rather than echo because echo is unreliable and
# easily broken.
printf "\nExaminando: %s (%s)\n" "$label" "$rp"
if fsck -fy "$rp" ; then
if ! fsck -fy "$rp" ; then
printf "%s\n" "Error second fsck of $label ($rp) failed." >&2
fi
else
printf "%s\n" "Error: first fsck of $label ($rp) failed." >&2
fi
done
또한보십시오:
help mapfile
내장 매핑 파일에 대한 자세한 내용을 보려면 bash에서 실행하세요 .https://wiki.bash-hackers.org/commands/builtin/mapfile또한 읽어볼 가치가 있습니다.