ব্যাখ্যা করা প্রোগ্রামিং ভাষার চেয়ে শেল স্ক্রিপ্টের সুবিধা কী? [বন্ধ]


15

(আমি নিশ্চিত নই যে এটি এখানে উপযুক্ত প্রশ্ন কিনা)

শেল স্ক্রিপ্টগুলি যেমন লেখা আছে bash, অনেক কিছুই করতে পারে। তারা ইউনিক্স প্রোগ্রামগুলিতে কল করতে, তাদের আউটপুটটি পাইপ করতে, ফাইলগুলি / থেকে ফাইলগুলিতে I / O পুনর্নির্দেশ, নিয়ন্ত্রণ প্রবাহ, কোনও ফাইল বিদ্যমান কিনা তা পরীক্ষা করতে পারে etc.

তবে একটি আধুনিক প্রোগ্রামিং ল্যাঙ্গুয়েজ, যেমন, pythonএবং ruby, এই জিনিসগুলিও করতে পারে। এবং, এগুলি (আমার মনে হয়) আরও পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য।

bashবিস্তৃত স্প্রেড গ্রহণ গ্রহণ করে। তবে অনেকগুলি ডিস্ট্রিবিউশনও pythonইন্টারপ্রেটার ইনস্টল করেছেন।

সুতরাং একটি স্ক্রিপ্ট শেল সুবিধা কি? আমি যদি লিখতে পারতাম python, rubyবা perl, এটি শেখার পক্ষে মূল্যবান কি bash?


3
আপনি যদি ইউনিক্স সিস্টেমগুলির সাথে অনেক বেশি কাজ করেন তবে আপনার অন্যান্য জনপ্রিয় ইউনিক্স শেলগুলি পাশাপাশি বাশ শিখতে হবে।
বার্নার্ড

উত্তর:


30

শেলগুলিতে ফাইলগুলির সাথে কাজ করার এবং একটি প্রোগ্রাম থেকে অন্য প্রোগ্রামে ডেটা পাওয়ার জন্য বিশেষ বৈশিষ্ট্য রয়েছে (এটি ডেটা পাঠ্য বলে ধরে নেওয়া হয়)। এই কাজের জন্য, পাইথনের মতো স্ক্রিপ্টিং ভাষার চেয়ে শেল স্ক্রিপ্টগুলি কম জটিল হতে পারে।

শেল স্ক্রিপ্টিংয়েরও সুবিধা রয়েছে যে আপনি যে কমান্ডগুলি ব্যবহার করেন তা হ'ল কমান্ড লাইন থেকে আপনি একই কমান্ডগুলি ব্যবহার করেন - সুতরাং যদি আপনি শেলটিতে কিছু করতে পারেন তবে আপনি একই ক্রিয়াকে স্ক্রিপ্ট করার চেয়ে অর্ধেকেরও বেশি।

এখানে উদাহরণস্বরূপ একটি বাশ স্ক্রিপ্ট যা সমস্ত ডিরেক্টরি থেকে বর্তমান ডিরেক্টরি থেকে একটি নির্দিষ্ট ডিরেক্টরিতে সরিয়ে দেয় P

#!/usr/bin/sh
mv *.png $1

এখানে পাইথন সংস্করণ।

#!/usr/bin/python
import sys, shutil, glob
for filename in glob.iglob("./*.png"):
    shutil.move(filename, sys.argv[1])

আপনি খেয়াল করবেন:

  • বাশ স্ক্রিপ্টটি পাইথন হিসাবে তৃতীয় যতক্ষণ আপনি লাইন গণনা করেন (শেবাং লাইন বাদে) - চরিত্রের সংখ্যা অনুসারে এমনকি কম
  • পাইথন স্ক্রিপ্টের জন্য তিনটি লাইব্রেরি আমদানি করা প্রয়োজন, যখন এই কাজের জন্য আপনার প্রয়োজনীয় সমস্ত কিছুই প্রাথমিকভাবে ব্যাশে উপলব্ধ
  • পাইথন স্ক্রিপ্টের জন্য ফাইলগুলি সরানোর জন্য একটি স্পষ্ট লুপের প্রয়োজন হয়, যেখানে এটি mvবাশ- এর কমান্ডের শব্দার্থের অংশ is
  • ব্যাশ স্ক্রিপ্টটি দ্রুত চলতে পারে - আপনি সম্ভবত এটি ব্যাশ থেকে প্রার্থনা করতে পারেন এবং আপনি sourceএটি শেলের একই উদাহরণে চালাতে ব্যবহার করতে পারেন
  • glob.iglob("./*.png") বলতে গেলে বেশ মুখরোচক *.png

আপনি যদি পাইথনে একটি বেসিক পাইপ ক্রিয়াকলাপ লিখতে চান, তবে আপনি ভার্বোসিতে হতবাক হয়ে যাবেন। (অবশ্যই, পাইপিংয়ের মতো কিছু জিনিস grepবাইরের প্রোগ্রাম ব্যবহার না করে পাইথন কোড দ্বারা প্রতিস্থাপন করা যেতে পারে, তাই আপনাকে প্রায়শই পাইপ করার প্রয়োজন হয় না))

কাউন্টারেরেক্সাম হিসাবে, আমাকে একবারে একটি রুটিন লিখতে হয়েছিল যা পরীক্ষা করে দেখায় যে প্রতিটি ফাইলের নাম নির্দিষ্ট ডিরেক্টরিতে কতক্ষণ ছিল। এগুলি যদি কোনও নির্দিষ্ট ওএস দ্বারা সমর্থিত হয় তবে তাদের ছোট করা উচিত। এর ফলে ডুপ্লিকেট ফাইলনাম হতে পারে যা আমার সংশোধন করার দরকার ছিল এবং যেহেতু সেগুলি একটি ওয়েব পৃষ্ঠা থেকে সংযুক্ত করা হবে, তাই সংক্ষিপ্ত নামগুলি স্থিতিশীল হওয়া দরকার, অর্থাত্ সেগুলি এমনভাবে তৈরি করা উচিত যাতে একই দীর্ঘ ফাইলের নামটি সর্বদা ফলত একই সংক্ষিপ্ত ফাইলের নাম। আমি লম্বা ফাইলনামের একটি হেক্স এমডি 5 তৈরি করে এবং এর প্রথম চারটি অক্ষরকে সংক্ষিপ্ত নামের সাথে সংযুক্ত করে এটি করেছি (নামগুলি এখনও সংঘটিত হতে পারে, তবে এটি খুব অনর্থক ছিল, তাই আমি কেবল সেই শর্তটি যাচাই করেছিলাম এবং এটি হওয়ার আগে জামিনে আটকানো হয়) ।

আমি ব্যাশে এটি করেছি কারণ এটি আমাদের বিল্ড সিস্টেমের অংশ ছিল যা ইতিমধ্যে ব্যাশে লেখা ছিল। আপনি সম্ভবত যা ভাবছেন ঠিক ঠিক ততটা পাওয়া ঠিক ছিল। পাইথনে লিখতে অনেক কম সময় লাগত এবং সম্ভবত এটি আরও পরিষ্কার হয়ে যেত।

সংক্ষেপে: বিভিন্ন ভাষা বিভিন্ন ধরণের কাজের জন্য ডিজাইন করা হয়েছে; আপনার কাছে উপলভ্য ভাষা চয়ন করুন যা হাতের কাজটির জন্য সবচেয়ে উপযুক্ত।


আপনি পার্ল # / ইউএসআর / বিন / পার্লে একই কাজ করতে পারবেন mv *.png $1না (মন্তব্যগুলি ফর্ম্যাটটি ধরে রাখে না) তবে পার্লের সাহায্যে আপনি উচ্চ স্তরের ভাষার বৈশিষ্ট্যও ব্যবহার করতে পারেন।
পোমা

19

বিদ্যমান উত্তরগুলিও বৈধ, তবে এর একটি কারণ এখনও কেউ উল্লেখ করেনি: কারণ এটি সেখানে থাকবে।

প্রদত্ত যে কোনও * নিক্স ইনস্টল কিছু alচ্ছিক প্যাকেজগুলির সেট দিয়ে সম্পন্ন হয় যা লোড হতে পারে এবং নাও হতে পারে, এবং সমস্ত সিস্টেমে পাইথন বা পার্ল বা রুবি থাকবে না। তবে যদি সিস্টেমটির মধ্যে কোনও ইন্টারেক্টিভ দক্ষতা থাকার কথা আশা করা হয় তবে এটির একটি শেল থাকবে। এর অর্থ হ'ল শেল স্ক্রিপ্টগুলি লিখিতযোগ্য ফাইল সিস্টেম এবং ব্যাশ কমান্ড লাইন সমর্থন করে এমন কোনও সিস্টেমে সার্ভার থেকে প্রোগ্রামার ডেস্কটপগুলি থেকে সেক্রেটারিয়াল পাতলা-ক্লায়েন্ট ডেস্কটপগুলি এম্বেডড ডিভাইসগুলিতে সিস্টেমগুলিতে কাজ করবে।

যে কারওর জন্য কেবলমাত্র একটি সামঞ্জস্যপূর্ণ সার্ভার পরিবেশে কাজ করা হয়, এটি এমন কিছু যা মর্যাদার জন্য নেওয়া যেতে পারে, এবং এটি অত গুরুত্বপূর্ণ নয়। আরও বৈচিত্রময় পরিবেশে কাজ করা কারও পক্ষে, এটি উপেক্ষা করা উচিত নয়।


9

আপনার প্রশ্নের একটি উল্লেখযোগ্য অংশ এখানে উত্তর দেওয়া হয়েছে:

স্ক্রিপ্টিং ভাষা (যেমন পার্ল, পাইথন, রুবি) শেল ভাষা হিসাবে উপযুক্ত নয় কেন?

আমার এই প্রশ্নের উত্তর থেকে একটি অংশ এখানে দেওয়া হয়েছে :

আমি বিভিন্ন মতপার্থক্য আছে যা আমি ভাবতে পারি; কোনও নির্দিষ্ট ক্রমে কেবল এখানে চিন্তাভাবনা করছি:

  1. পাইথন এন্ড কোং স্ক্রিপ্টিং এ ভাল হতে ডিজাইন করা হয়েছে। বাশ এন্ড কোং কোনও স্ক্র্যাপ্টিংয়ের ক্ষেত্রে কেবল ভাল হতে ডিজাইন করা হয়েছে , একেবারে কোনও আপস ছাড়াই। আইওউ: পাইথন স্ক্রিপ্টিং এবং নন-স্ক্রিপ্টিং উভয় ক্ষেত্রেই ভাল ডিজাইন করা হয়েছে, বাশ কেবল স্ক্রিপ্টিং সম্পর্কেই যত্নশীল।

  2. ব্যাশ অ্যান্ড কোং টাইপযুক্ত নয়, পাইথন এন্ড কোং দৃ strongly়ভাবে টাইপ করা হয়েছে যার অর্থ সংখ্যা 123, স্ট্রিং 123এবং ফাইলটি 123একেবারেই আলাদা। এগুলি অবশ্য স্ট্যাটিকালি টাইপড নয়, যার অর্থ তাদের আলাদা রাখার জন্য তাদের জন্য আলাদা আলাদা আক্ষরিক প্রয়োজন। উদাহরণ:

    • রুবি: 123(সংখ্যা), বাশ:123
    • রুবি: '123'(স্ট্রিং), বাশ:123
    • রুবি: /123/(রিজেক্সপ), বাশ:123
    • রুবি: File.open('123')(ফাইল), বাশ:123
    • রুবি: IO.open('123')(ফাইল বর্ণনাকারী), বাশ:123
    • রুবি: URI.parse('123')(ইউআরআই), বাশ:123
    • রুবি: `123`(কমান্ড), বাশ:123
  3. পাইথন অ্যান্ড কোং আকার পরিবর্তন করতে ডিজাইন করা হয় আপ 10000 100000 এ সম্ভবত হতে পারে এমনকি 1000000 লাইন প্রোগ্রাম, ব্যাশ অ্যান্ড কোং আকার পরিবর্তন করতে ডিজাইন করা হয় নিচে থেকে 10 অক্ষর প্রোগ্রাম।

  4. বাশ অ্যান্ড কো-তে, ফাইল, ডিরেক্টরি, ফাইল বর্ণনাকারী, প্রক্রিয়াগুলি সমস্ত প্রথম শ্রেণীর অবজেক্টস, পাইথনে, কেবল পাইথন অবজেক্টই প্রথম শ্রেণীর হয়, যদি আপনি ফাইল, ডিরেক্টরি ইত্যাদি পরিচালনা করতে চান তবে আপনাকে সেগুলি একটিতে মুড়ে রাখতে হবে পাইথন অবজেক্ট প্রথমে।

  5. শেল প্রোগ্রামিং মূলত ডেটাফ্লো প্রোগ্রামিং। কেউ তা বুঝতে পারে না, এমনকি শেল লেখার লোকেরাও তা নয়, তবে দেখা গেছে যে শাঁসগুলি এতে বেশ ভাল এবং সাধারণ-উদ্দেশ্যমূলক ভাষাগুলি এত বেশি নয়। সাধারণ উদ্দেশ্যমূলক প্রোগ্রামিং বিশ্বে ডেটাফ্লোটি বেশিরভাগ একটি কনক্যুরেন্সির মডেল হিসাবে দেখা হয় বলে মনে হয়, কোনও প্রোগ্রামিং দৃষ্টান্তের মতো নয়।

আমার এই অনুভূতি আছে যে সাধারণ উদ্দেশ্যমূলক প্রোগ্রামিং ল্যাঙ্গুয়েজে বৈশিষ্ট্য বা ডিএসএল বোল্ট করে এই পয়েন্টগুলিকে সম্বোধনের চেষ্টা করা কার্যকর হয় না। কমপক্ষে, আমি এখনও এটির একটি দৃinc় বাস্তবায়ন দেখতে পাই। এখানে রুশ (রুবি শেল) রয়েছে, যা রুবিতে একটি শেল বাস্তবায়নের চেষ্টা করে, সেখানে হুড়োহুড়ি হয়, যা রুবির শেল প্রোগ্রামিংয়ের জন্য একটি অভ্যন্তরীণ ডিএসএল, হটওয়ায়ার রয়েছে, যা পাইথন শেল, তবে আইএমও এর মধ্যে কোনওটিই কাছে আসে না বাশ, জেড, মাছ এবং বন্ধুদের সাথে প্রতিযোগিতা করতে।


ব্রোকন লিঙ্ক: আপনি এখন এই প্রশ্নটি (এবং উত্তর) কোথায় উল্লেখ করেছেন? বা এখানে দরকারী সমস্ত কি অনুলিপি করা হয়েছিল?
নেকড়ে

1
@ ওল্ফ: স্পষ্টতই, প্রায় তিন বছর পরে এটি অফ-টপিক থাকার কারণে মুছে ফেলা হয়েছিল। এটা দুর্ভাগ্যজনক.
Jörg ডব্লু মিটাগ

1
এখানে এই প্রশ্নের একটি আর্কাইভ সংস্করণ রয়েছে: web.archive.org/web/20140528035940/http://stackoverflow.com/…
ওয়ালডিরিয়াস

1

আমি বলব যে একটি পরিস্থিতিতে একটি শেল স্ক্রিপ্টের সুবিধা রয়েছে যেখানে আপনি কেবল একটি অতি-সরল স্বয়ংক্রিয় টাস্কটি আপ করতে চান। উদাহরণস্বরূপ, যদি আপনি এমন একটি স্ক্রিপ্ট লিখতে চান যা প্রতিদিন একটি সার্ভার থেকে অন্য সার্ভারে একটি ডিরেক্টরিকে ব্যাক আপ করে 5:00 টায়, ভারী শুল্ক প্রোগ্রামিং ভাষা ব্যবহার করা ওভারকিল হবে।

অন্যদিকে, যদি আপনার প্রোগ্রামিং টাস্কের নিয়ন্ত্রণ কাঠামোর (যদি / তারপরে / অন্যথায়), পুনরাবৃত্ত স্ট্রাকচারগুলি (লুপিং), ডাটাবেস এবং ফাইল I / O, ইত্যাদির প্রয়োজন হয় তবে এটি সম্ভবত আরও সক্ষমের জন্য আরও উপযুক্ত শেল স্ক্রিপ্টের চেয়ে প্রোগ্রামিং ভাষা।

আমি মনে করি থাম্বের একটি ভাল নিয়ম হ'ল:

automatingSimpleTask ? shellScript() : programmingLanguage();

2
এটা shellScript() if automatingSimpleTask else programmingLanguage() lol হওয়া উচিত নয় ।
গাহোয়া

1
@ গাহোয়া হাহা দেখায় আমি বেড়ার কোন দিকে আছি!
সিএফএল_ জেফ

1

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


0

আপনি যদি নির্দিষ্ট কাজের জন্য যে প্রোগ্রামিং ভাষা ব্যবহার করেন তা চয়ন করতে আপনি পুরোপুরি মুক্ত হন তবে আপনি সম্ভবত প্রায়শই সম্পূর্ণরূপে বাশ শিখতে পারবেন এবং পার্ল, পাইথন বা রুবির সাথে প্রতিটি স্ক্রিপ্ট প্রোগ্রামিংয়ের কাজটি করতে পারবেন। এটি কখনও কখনও আরও ভার্জোজাল সমাধানের দিকে নিয়ে যায়, বিশেষত যখন আপনার যখন অন্য ইউনিক্স সরঞ্জামগুলির ক্রম হিসাবে ডাকা স্ক্রিপ্টের প্রয়োজন হয় তবে আরও জটিল ক্ষেত্রে আপনি ঠিক বলেছেন, আধুনিক স্ক্রিপ্টের ভাষাগুলি আপনাকে আরও ভালভাবে রক্ষণাবেক্ষণযোগ্য কোড লেখার জন্য আরও সম্ভাব্য সংস্থান দেয় (তারা আপনাকে অবধি বিহীন কোড লিখতে আরও সম্ভাব্য সংকেত দেয়, তবে আপনার পছন্দটি পছন্দ করে)।

অন্যদিকে, প্রায়শই আমরা যে ভাষাটি সবচেয়ে বেশি পছন্দ করি তা চয়ন করতে আমরা মুক্ত নই, কারণ আমাদের এমন একজনের লিখিত উত্তরাধিকার কোড বা কোড নিয়ে কাজ করতে হবে যিনি বাশ জানতেন তবে আপনার নামক একটি স্ক্রিপ্টিং ভাষা জানেন না।


0

শেল স্ক্রিপ্টিং হয় একটি ব্যাখ্যা প্রোগ্রামিং ভাষা। পার্ল বা পাইথন বা অন্য কোনও স্ক্রিপ্টিং ভাষার পরিবর্তে ব্যাশে স্ক্রিপ্টগুলি লেখার জন্য কেন কয়েকটি কারণ এখানে রয়েছে:

সর্বত্র কাজ করে : আরও জটিল দোভাষী সবসময় পাওয়া না যায় যেমন সিস্টেম শুরুর সময় বা এম্বেড থাকা সিস্টেমে systems ব্যাসবক্সেও ব্যাশ পাওয়া যায়।

কমান্ড লাইনে কাজ করে : আপনি যদি শেল-স্ক্রিপ্টিংয়ের বিষয়ে দক্ষ হন তবে আপনি এই দক্ষতাগুলি কমান্ড লাইনের ঠিক সময়ে অ্যাড-হক স্ক্রিপ্টগুলিতে জটিল জিনিসগুলি করতে ব্যবহার করতে পারেন। আমি প্রতিদিন এই দক্ষতা সিসাদমিন হিসাবে ব্যবহার করি।

অন্যান্য প্রোগ্রামগুলিকে কল করে এমন প্রোগ্রামগুলি লেখার পক্ষে সহজ: আপনি যা করতে চেষ্টা করছেন তা যদি বেশ কয়েকটি বিদ্যমান প্রোগ্রামকে আকর্ষণীয় উপায়ে এক সাথে করা হয়, তবে উচ্চতর স্তরের ভাষার চেয়ে শেল স্ক্রিপ্টে করা আরও সহজ।

প্রোগ্রামটি যদি 30 লাইন বা তার চেয়ে কম হয় তবে আমি সাধারণত শেল স্ক্রিপ্টিং ব্যবহার করে এটি লিখব। যদি মোকদ্দমার জন্য কোনও জটিল হেরফের বা জটিল বা বিশ্লেষণ থাকে তবে আমি পাইথন বা পার্ল ব্যবহার করে এটি করব।


-1

আপনার কফিসক্রিপ্টটি একবার দেখুন। তাদের কথা:

এই সমস্ত বিশ্রী ধনুর্বন্ধনী এবং সেমিকোলনের নীচে, জাভাস্ক্রিপ্টের সর্বদা এটির হৃদয়ে একটি চমত্কার অবজেক্ট মডেল ছিল। কফিস্ক্রিপ্ট জাভাস্ক্রিপ্টের ভাল অংশগুলি একটি সহজ উপায়ে প্রকাশ করার চেষ্টা।

কফিস্ক্রিপ্টের সুবর্ণ নিয়মটি হল: "এটি কেবল জাভাস্ক্রিপ্ট"।

ভাল ... এখানে সুপার বিগনার উত্তর আসে।

গত months মাস ধরে অটো-লার্নিং শিক্ষানবিশ হিসাবে এবং শেষ দিনগুলিতে সামান্য কিছুটা সি, সি ++, জাভাস্ক্রিপ্ট এবং আরও বেশি বাশস্ক্রিপ্ট পরীক্ষা করে ... আমি আপনাকে বলতে পারি:

শ্যাশ স্ক্রিপ্টগুলি, যেমন ব্যাশে লেখা রয়েছে, অনেক কিছুই করতে পারে। তারা ইউনিক্স প্রোগ্রামগুলিতে কল করতে, তাদের আউটপুটটি পাইপ করতে, ফাইলগুলি / থেকে ফাইলগুলিতে I / O পুনর্নির্দেশ, নিয়ন্ত্রণ প্রবাহ, কোনও ফাইল বিদ্যমান কিনা তা পরীক্ষা করতে পারে etc.

এবং এই সহজ চমত্কার নয়! ? লুপ এবং ভেরিয়েবল? কি দারুন!

পাইথন এবং রুবিও এই জিনিসগুলি করতে পারে। এবং, এগুলি (আমার মনে হয়) আরও পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য।

দয়া করে বলুন আপনি কোথায় দেখছেন? আমি bashscript লিখেছেন gedit- র দ্বারা এমনকি geany এবং আমি ফরম্যাট করতে পারেন, (ট্যাব?) আর আমি অন্য ভাষায় উপর comparision আলোর bashscript ব্যবহারের গতিতে আমার কোড পড়া।

এই ভাষাগুলিতে শৃঙ্খলা রক্ষার জন্য অন্যান্য সরঞ্জাম রয়েছে? আমি জানি প্রচুর কোড সংরক্ষণ করে অনেকগুলি কোড, তবে ... লোকে বলে বাশস্ক্রিপ্টও ওও! বাহ 2! এখানে আমার বক্তব্য। যাচ্ছি:

শিল একটি স্ক্রিপ্ট সুবিধা

এই প্রশ্নের অভ্যন্তরে: এই বশমদাঁথিং পার্ল বা ফাইটন বা রুবিতে কী করতে পারে তা কীভাবে করবেন ? এটি সহজ?

( বাশদমথিং = এক্সডটুল )


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