ব্যাশে লুপের অবস্থায় নেগেট


25

আমি যে স্ক্রিপ্টটিতে কাজ করছি তার অংশে, আমি যাচাই করতে চাই যে ইনপুটযুক্ত আইপি ঠিকানাটি সঠিক ফর্ম্যাটে রয়েছে। ইনপুট ফর্ম্যাটটি সঠিক না থাকলে আমি একটি লুপ তৈরি করতে চাই। নিম্নলিখিতটি একটি লুপের জন্য কাজ করে যখন ফর্ম্যাটটি সঠিক।

while  [[  $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]
      do

ফর্ম্যাটটি ফিট করে না বলার জন্য আমি কীভাবে এটি ঘুরিয়ে দিতে পারি। আমি আশা করি !=~কাজ করবে তবে আমি একটি সিনট্যাক্স ত্রুটি করছি।


2
সিন্নার, সাবধানতার একটি নোট: এটি স্পষ্ট যে আপনি একটি ইন্টারেক্টিভ স্ক্রিপ্ট লিখছেন, শেল স্ক্রিপ্টিংয়ের অপরিমেয় শক্তি একই স্ক্রিপ্টের সাথে ইন্টারেক্টিভ এবং ব্যাচ মোডে একই জিনিসটি করতে সক্ষম হয়ে আসে। ভবিষ্যতে (যখন আপনি স্ক্রিপ্টটি বিল্ডিং ব্লক হিসাবে ব্যবহার করা শুরু করবেন) অবশ্যই কমান্ড লাইনের অপশনগুলি সন্নিবেশ করানো এবং যদি কিছু ভুল হয় তবে অবিলম্বে একটি শূন্য-বহির্গমন কোড (এবং একটি বার্তা) দিয়ে ফিরে আসা সহজ হবে easier কেবল আমার 2 সেন্ট ...
হরিণ হান্টার

উত্তর:


60

সমাধানটি এত সহজ, আমি নিশ্চিত আপনি সব এটি মজার পাবেন।

নেতিবাচক সিনট্যাক্স বিশদ সম্পর্কে কাজ করার দরকার নেই, কেবল untilপরিবর্তে ব্যবহার করুন while


9

স্ট্রিংয়ের তুলনার জন্য, এর !=পরিবর্তে ব্যবহার করা উচিত !=~

থেকে man bash

string1 != string2
          True if the strings are not equal.

আপনি ডানদিকে একটি নিয়মিত প্রকাশটি ব্যবহার করছেন, আপনার অবশ্যই প্রয়োজন =~। আপনি সম্পূর্ণ অভিব্যক্তি তুচ্ছ করতে বেছে নিতে পারেন।

while  [[  !( $range =~ ^[0-9]{1,3]}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ) ]]

উদাহরণ:

$ bash --version | head -n1
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
$ cat script
range='1'; while [[ !( $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ) ]]; do echo "$range NOT OK"; range+='.2'; sleep 1; done
echo "Finished"
$ bash script
1 NOT OK
1.2 NOT OK
1.2.2 NOT OK
Finished
$ 

দ্রুত প্রতিক্রিয়ার জন্য ধন্যবাদ। পোস্ট করার আগে আমি চেষ্টা করেছি এবং এটি সঠিকভাবে বৈধ হয় না। এটি ফর্ম্যাটের সাথে খাপ খায় এমনটি কার্যকর করার সময় এটি সঠিকভাবে কাজ করার দরকার বলে মনে হয়।
সিন্নার

@ সিনার সম্পাদনাটি দেখুন
বার্নহার্ড

bash4.2.42 দিয়ে কাজ করে না । পেস্টবিন.কম
ভিভিএইচ

1
@ মান্যাটওয়ার্ক একটি অ-ইন্টারেক্টিভ শেল দিয়ে চেষ্টা করুন।
বার্নহার্ড

@ মান্যাটওয়ার্ক আমার সম্পাদনা দেখুন
বার্নহার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.