আমি যতদূর দেখতে পাচ্ছি, আপনার কোডে আপনার কোনও অ্যারে নেই। ভেরিয়েবল msgNumbersএমন একটি স্ট্রিং যা আপনার cutকমান্ডের আউটপুট ধারণ করে ।
এর আউটপুট উপর পুনরাবৃত্তি করতে cut, ব্যবহার করুন
#!/bin/bash
mailx -H | grep '^ [UN]' | cut -c 4-5 |
while read msg; do
print 'msg = %s\s' "$msg"
done
এটি পাইপ ( ) এর মাধ্যমে তাৎক্ষণিকভাবে অনুসরণ cutকরে whileলুপের আউটপুট প্রেরণ করে |। whileলুপ সঙ্গে পুনরুক্তি হবে msgথেকে আউটপুট প্রতিটি লাইন সেট cut।
cutথেকে সরাসরি তার ডেটা পায় grepকমান্ড, যা একটি অন্তর্বর্তী ফাইল বা পরিবর্তনশীল মধ্যে ডেটা সঞ্চয় করার জন্য প্রয়োজন সরিয়ে ফেলা হয়।
আমি echo $msg|mailx;কমান্ডটি অপসারণ করেছি কারণ এটি আমার কাছে খুব বেশি বোঝায় না ( mailxডেটাতে প্রেরণের জন্য ইউটিলিটির একটি ঠিকানা প্রয়োজন)।
grep+ + cutএছাড়াও একটি একক কল দ্বারা প্রতিস্থাপিত হতে পারে awkযেখানে আমরা দিন awkযখন রেগুলার এক্সপ্রেশনের সাথে মেলে উভয় টুলস এবং আউটপুট কাজ দ্বিতীয় হোয়াইটস্পেস-সীমা নির্দেশ করা কলাম করুন:
#!/bin/bash
mailx -H | awk '/^ [UN]/ { print $2 }' |
while read msg; do
print 'msg = %s\s' "$msg"
done
আমি এর ব্যবহারের বিষয়ে আরও মন্তব্য করছি না mailxকারণ এটি একটি মানহীন ইউটিলিটি যা ইউনিক্স সিস্টেমগুলিতে কিছুটা ভিন্নভাবে প্রয়োগ করা হয়েছে ( -Hউদাহরণ হিসাবে, আমার সংস্করণটির কোনও বিকল্প নেই) have
#!লাইন আমার কাছে ঠিক আছে দেখে মনে হচ্ছে আপনি চাইলে স্ক্রিপ্ট দ্বারা নিষ্পন্ন করা হবে bashএবং যদি bashএক্সিকিউটেবল সেই পথ এ অবস্থিত (যা এটা সাধারণত উদাহরণস্বরূপ, লিনাক্স সিস্টেমে, কিন্তু সঙ্গে চেক command -v bashনিশ্চিত হতে আপনার সিস্টেমে)। আমি উপরে পোস্ট করা কোডটির সাথে সামঞ্জস্যপূর্ণ /bin/sh, তাই bashএটি চালানোর জন্য আসলেই এটির প্রয়োজন হয় না (এটি কোনও shঅনুরূপ শেলের মধ্যে চলবে )।
কেবলমাত্র নিশ্চিত হয়ে নিন যে স্ক্রিপ্টটি কার্যকর হয় এবং আপনি কোনও স্পষ্টত দোভাষীকে নির্দিষ্ট না করেই এটিকে চালিত করেন।