เปรียบเทียบสองสตริงใน Bash


13

ฉันต้องการสร้างสคริปต์ที่ลบไดเรกทอรีด้วยrmdirหลังจากยืนยันด้วยรหัสผ่านที่ใช้readในการตั้งค่าตัวแปร

จนถึงตอนนี้ฉันมีสิ่งนี้:

#!/bin/bash -x
echo "Password:"
read -t 30 S1
    S2='55555'
if [ $S1=$S2 ]; then
    rmdir /home/william/test
else
    echo "fail"
sleep 10
fi

ดังนั้นฉันต้อง-xลองแก้ไขมัน แต่ทุกครั้งที่สคริปต์ไม่สามารถสะท้อน (ถ้าฉันใส่รหัสผิด) หรือมันจะไม่ลบไดเรกทอรีที่จำเป็น

หากใครบางคนมีสคริปต์ที่แก้ไขได้ที่ฉันสามารถใช้หรือถ้าคุณสามารถชี้ให้เห็นปัญหากับสคริปต์ปัจจุบันที่จะดี

คำตอบ:


17

วิธีที่ถูกต้องในการเปรียบเทียบสองสตริง ( S1และS2) ใช้ifคือ:

if [ "$S1" = "$S2" ]

อย่าตระหนี่ถี่ถ้วนในการใช้พื้นที่ในกรณีนี้

ดู: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html


TLDP ไม่ใช่ไซต์ของแท้เนื่องจากมีความไม่สอดคล้องและข้อผิดพลาดมากมาย ฉันอยากจะแนะนำว่าเราไม่ได้ใช้มันเป็นข้อมูลอ้างอิง
codeforester

6

ในการทุบตีสคริปต์คุณต้องเปรียบเทียบตัวแปรสองตัวกับวิธีข้างล่าง

if [ "var1" != "var2" ]; then
  Do something
fi;

ช่องว่างมีความสำคัญ


4

คุณอาจใช้ GNU testเช่น:

test s1 = s2 && echo Equal || echo Not equal

ในบริบทของคุณมันคือ:

test "$S1" = "$S2" && rmdir -v /home/william/test
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.