2008-09-07 15 views
11

"सही" जिस तरह से एक बूलियन अभिव्यक्ति के रूप में निम्न करने के लिए क्या है?बूलियन भाव

for i in `ls $1/resources`; do 
    if [ $i != "database.db" ] 
    then 
     if [ $i != "tiles" ] 
     then 
      if [ $i != "map.pdf" ] 
      then 
       if [ $i != "map.png" ] 
       then 
        svn export -q $1/resources/$i ../MyProject/Resources/$i 
... 

उत्तर

11

अन्य समाधान आम गलतियों की एक जोड़ी है: http://www.pixelbeat.org/programming/shell_script_mistakes.html

  1. for i in $(ls ...) है निरर्थक/समस्याग्रस्त सिर्फ कार्य करें: for i in $1/resources*; do ...

  2. [ $i != file1 -a $1 != file2 ] यह वास्तव में 2 समस्या है।

    ए। $i उद्धृत नहीं है, इसलिए रिक्त स्थान के साथ नाम मुद्दों

    ख का कारण होगा। यदि stat फ़ाइलों ing के रूप में यह शॉर्ट सर्किट (मैं ऊपर है नहीं stat ing फ़ाइलों जानते हैं) नहीं है -a अक्षम है।

तो ऐसा करें:

for i in $1/resources/*; do 
    if [ "$i" != "database.db" ] && 
     [ "$i" != "tiles" ] && 
     [ "$i" != "map.pdf" ] && 
     [ "$i" != "map.png" ]; then 
     svn export -q "$i" "../MyProject/Resources/$(basename $i)" 
    fi 
done 
1
for i in `ls $1/resources`; do 
    if [ $i != "database.db" ] && [ $i != "tiles" ] && [ $i != "map.pdf" ] && [ $i != "map.png" ]; then 
     svn export -q $1/resources/$i ../MyProject/Resources/$i 
7

भी कम:

for i in `ls $1/resources`; do 
    if [ $i != databse.db -a $i != titles -a $i != map.pdf ]; then 
    svn export -q $1/resources/$i ../MyProject/Resources/$i 
    fi 
done; 

-a में अगर अभिव्यक्ति बूलियन की और खोल-परीक्षण में बराबर है। और अधिक देखने के लिए man test

3

एक मामले कथन का उपयोग पर विचार करें:

for i in $(ls $1/resources); do 
    case $i in 
     database.db|tiles|map.pdf|map.png) 
      ;; 
     *) 
      svn export -q $1/resources/$i ../MyProject/Resources/$i;; 
    esac 
done 
0

भविष्य में संदर्भ के लिए, नई [[परीक्षण ऑपरेटर पसंद किया जाता है। स्वीकार किए जाते हैं जवाब करीब है और सब कुछ उल्लेख लागू होता है, लेकिन यह है कि इस सवाल का जवाब के हवाले से की बहुत सारी की आवश्यकता होगी और कई परीक्षण करने के लिए कहता है।

पसंदीदा तरीका होगा कुछ की तरह:

for i in $1/resources/*; do 
    if [[ $i != "database.db" && $i != "tiles" && 
       $i != "map.pdf" && $i != "map.png" ]]; then 
     svn export -q "$i" "../MyProject/Resources/$(basename $i)" 
    fi 
done 
संबंधित मुद्दे