इसलिए मैं स्क्रिप्टिंग को बैश करने के लिए काफी नया हूं और मुझे अपनी समस्या का समाधान निकालने में समस्या हो रही है।
इसलिए मैं "ShiftCodeAssociations.txt" में तीन नंबर लिखना चाहता हूं और फिर सामग्री इस तरह दिखती है:
1
2
3
हालांकि, हर बार जब मैं इस स्क्रिप्ट को चलाता हूं तो मैं चाहता हूं कि यह संख्याओं को स्थानांतरित कर दे ताकि यह संख्या को ऊपर से नीचे की ओर रखे।
लूप्स रीडिंग लाइन बाय लाइन देखने के बाद मुझे यह https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ और निम्नलिखित के साथ आया
#!/bin/bash
input="/home/ubuntu/ShiftCodeAssociations.txt"
while IFS= read -r line
do
if [$line = "1"]
then
$line = "2"
elif [$line = "2"]
then
$line = "3"
else
$line = "1"
fi
done < $input
हालाँकि, यह काम नहीं करता है और यह आउटपुट करता है
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [1: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [1: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 1: not found
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [2: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [2: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 2: not found
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [3: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [3: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 3: not found
कृपया क्या कोई मेरी मदद कर सकता है :)
शुक्रिया!
2 जवाब
एसईडी
sed -i '1{h; d}; $G' ShiftCodeAssociations.txt
जीएनयू awk
gawk -i inplace 'NR == 1 {first = $0; next} 1; END {print first >> FILENAME}' ShiftCodeAssociations.txt
दे घुमा के
f="ShiftCodeAssociations.txt"
mapfile -t lines < "$f"
lines+=("${lines[0]}")
unset 'lines[0]'
printf '%s\n' "${lines[@]}" > "$f"
# The rotation can also be done like this:
# lines=( "${lines[@]:1}" "${lines[0]}" )
या
f="ShiftCodeAssociations.txt"
temp=$(mktemp)
while IFS= read -r num; do
echo "$(( num % 3 + 1 ))"
done < "$f" > "$temp" && mv "$temp" "$f"
BTW, यह स्क्रिप्ट क्या कर रही है यह वास्तव में स्पष्ट नहीं है: जैसा कि यह कुछ भी आउटपुट नहीं करेगा। if स्टेटमेंट के भीतर आप केवल स्ट्रिंग्स "1"
, "2"
और "3"
को वेरिएबल $line
में असाइन कर रहे हैं (फ़ाइल की लाइन के अनुरूप प्रारंभिक मान को प्रतिस्थापित करना)।
आप कमांड echo
का उपयोग करके देख सकते हैं और मान को किसी फ़ाइल में रीडायरेक्ट कर सकते हैं।
सही सिंटैक्स के साथ स्क्रिप्ट का अनुसरण करना।
#!/bin/bash
input="/home/ubuntu/ShiftCodeAssociations.txt"
while IFS= read -r line
do
if [[ "$line" == "1" ]]; then
line="2"
elif [[ "$line" == "2" ]]; then
line="3"
else
line="1"
fi
done < $input
बैश थोड़ा अजीब है क्योंकि "रिक्त स्थान" अन्य परिष्कृत भाषाओं की तुलना में थोड़ा अलग व्यवहार करता है। उदाहरण के लिए, एक चर निर्दिष्ट करते समय फॉर्म $line = "1"
काम नहीं करता है क्योंकि $line
को प्रक्षेपित किया जाएगा और एक कमांड के रूप में माना जाएगा (इसके बाद एक स्थान है)।
संबंधित सवाल
नए सवाल
linux
LINUX QUESTIONS को संबंधित होना चाहिए। इस टैग का उपयोग केवल तभी करें जब आपका प्रश्न लिनक्स एपीआई या लिनक्स-विशिष्ट व्यवहार का उपयोग करके प्रोग्रामिंग से संबंधित हो, न कि केवल इसलिए कि आप लिनक्स पर अपने कोड को चलाने के लिए होते हैं। यदि आपको लिनक्स समर्थन की आवश्यकता है तो आप https://unix.stackexchange.com या विशिष्ट लिनक्स वितरण की स्टैक एक्सचेंज साइट जैसे https://askubuntu.com या https://elementaryos.stackexchange.com/ की कोशिश कर सकते हैं