Det finns flera tillvägagångssätt för att hitta palindromet för ett nummer i ett Unix -skriftskript. Här är två versioner:en som använder endast inbyggda skalkommandon (mer bärbara men potentiellt mindre effektiva för mycket stort antal) och en annan med `awk '(effektivare för större antal).
Version 1:Använda endast skalinbyggda (bash)
Denna version är mer bärbar eftersom den bara förlitar sig på funktioner som är gemensamma för de flesta Bourne-kompatibla skal. Det är emellertid mindre effektivt för mycket stora antal på grund av strängmanipulation.
`` `bash
#!/bin/bash
Läs -p "Ange ett nummer:" Num
vända numret med strängmanipulation
reversed_num =$ (echo "$ num" | rev)
Jämför de ursprungliga och omvända siffrorna
if ["$ num" =="$ reversed_num"]; sedan
echo "$ num är en palindrome."
annan
echo "$ num är inte en palindrome."
fi
`` `
Version 2:Använda AWK (effektivare)
Denna version använder "Awk", vilket i allmänhet är effektivare för numeriska manipulationer, särskilt med större antal.
`` `bash
#!/bin/bash
Läs -p "Ange ett nummer:" Num
Använd AWK för att vända numret och kontrollera om Palindrome
awk -v num ="$ num" 'börja {
reversed_num ="";
temp_num =num;
medan (temp_num> 0) {
reversed_num =reversed_num (temp_num % 10);
temp_num =int (temp_num / 10);
}
if (num ==reversed_num) {
print num "är en palindrome."
} annat {
print num "är inte en palindrome."
}
} '
`` `
Hur man använder antingen skript:
1. Spara koden som en fil (t.ex. `palindrome.sh`).
2. Gör det körbart:`chmod +x palindrome.sh`.
3. Kör det:`./Palindrome.sh`.
4. Ange ett nummer när du uppmanas.
Förklaring av version 2 (AWK):
* `-v num =" $ num "`:passerar ingångsnumret från skalvariabeln `num` till` awk`-skriptet.
* `BEGIN ':Detta block körs innan de bearbetar några ingångslinjer.
* `Reversed_num =" ";`:Initialiserar en tom sträng för att lagra det omvända numret.
* `Temp_num =num;`:Skapar en tillfällig kopia av numret för att undvika att ändra originalet.
* `medan (temp_num> 0)`:slingor tills det tillfälliga antalet blir 0.
* `reversed_num =reversed_num (temp_num % 10);`:extraherar den sista siffran med Modulo -operatören (` %`) och lägger till den till `reversed_num`.
* `TEMP_NUM =int (TEMP_NUM / 10);`:tar bort den sista siffran av Integer Division (` /`).
* Det sista uttalandet "if" jämför de ursprungliga och omvända numren och skriver ut lämpligt meddelande.
"Awk" -versionen rekommenderas vanligtvis för sin effektivitet, särskilt när man hanterar större antal. Välj den version som bäst passar dina behov och skalmiljö. Kom ihåg att hantera potentiella fel (som icke-numerisk input) för ett mer robust manus i en produktionsmiljö.