Förforma endast operation i bash om en variabel är mindre än en andra variabel [stängd]

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Du har ett stavfel i båda skript; valid=${#vaidCheck} – Det säger vaidCheck; ska vara validCheck
  • Det verkar som om du försöker skapa ett chroot fängelse eller behållare. Det finns några bra verktyg som gör att du kan göra detta. Att använda verktyg på låg nivå är svårt och onödigt; ta en titt på ett verktyg på hög nivå som docker. Jag har ännu inte använt docker men kan vara vad du behöver. Jag har använt chroot fängelseverktyg, och de fungerar bra, men undersöker säkerhetsfrågorna (för chroot och containrar). Ether kommer att fungera bättre än vad vi kan göra själva.

Svar

Att svara på frågan i titeln kortfattat:

if [[ "$foo" -lt "$bar" ]]; then echo "$foo is less than $bar" fi 

Testerna för heltaljämförelser är:

 n1 -eq n2 True if the integers n1 and n2 are algebraically equal. n1 -ne n2 True if the integers n1 and n2 are not algebraically equal. n1 -gt n2 True if the integer n1 is algebraically greater than the integer n2. n1 -ge n2 True if the integer n1 is algebraically greater than or equal to the integer n2. n1 -lt n2 True if the integer n1 is algebraically less than the inte- ger n2. n1 -le n2 True if the integer n1 is algebraically less than or equal to the integer n2. 

Använda e. g. < eller > gör en ASCII-orderjämförelse, så [[ 0100 < 100 ]] kommer att vara sant.

Kommentarer

  • Stephen Harris hade rätt i att jag hade skrivit ett skrivfel, och du hade rätt i att jag hade använt felaktig syntax. Men även efter att ha korrigerat båda problemen fungerar inget skript ännu. /:
  • Lägg till set -x mot toppen av ditt skript och kör det med det på plats. Det visar dig vad skriptet faktiskt gör, så att du kan jämföra det med vad du tycker det ' gör och redigera därefter.

Svar

Tja, jag korrigerade skrivfelet, vilket verkligen bröt programmet, och Jag fixade operatörens syntax och bröt också definitivt den. Men (och det här kan tyckas löjligt), när jag väl har korrigerat dessa problem, formade jag valid=${#validCheck} manuellt för att testa strängens längd för alla fall och fann att katalogens längd var faktiskt 45 tecken, inte 46. Jag känner mig som en dope just nu, men jag är glad att problemet har lösts att jag kan gå vidare till mer pressande funktioner. Tack båda för dina korrigeringar av mina skrivfel och tack Richard för ditt förslag om chroot-fängelseverktyg.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *