বাশ শেবাং-এ কী করবে?


32

নিম্নলিখিতগুলির সাথে আমার একটি বাশ স্ক্রিপ্ট রয়েছে:

#!/bin/bash -e

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  echo "doesn't exist" 
fi

এই স্ক্রিপ্টটি -e ছাড়া চলবে না। -eএই স্ক্রিপ্টটির জন্য কী করে ? এছাড়াও, $?এই প্রসঙ্গে কী করে?


1
বিজোড়। কোন -eব্যক্তি পৃষ্ঠা থেকে (আমি সত্যিই একটি উত্তর ঠিকানা এই দেখতে চাই)। $?সর্বশেষ প্রস্থান কোড রয়েছে ( egrepউপরে উত্পন্ন প্রক্রিয়াটি)।

2
@pst: এর -eঅধীনে নথিভুক্ত করা হয় set
গ্রেগ হিউগিল

আপনি if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
এটির

2
আপনি ifএবং এর মধ্যে একটি জায়গা মিস করছেন [। এই স্ক্রিপ্টটি সাথে কাজ করবে না -e, কারণ স্ক্রিপ্টের grepঅধীনে কিছু না -eপেলে ঠিক সেখানেই শেষ হয়ে যাবে। ছাড়া -e, আপনি বার্তাটি পিছনের দিকে পেয়েছেন: 0 এর একটি স্ট্যাটাস ( $?) এর অর্থ গ্রিপ ব্যবহারকারীকে খুঁজে পেয়েছিল। নোট করুন যে এটি হতে হবে `গ্রেপ '^ ব্যবহারকারীর নাম:', যাইহোক (দীর্ঘ নাম সহ অন্য কোনও ব্যবহারকারী যদি থাকে তবে কী হবে)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

3
হবে #/bin/bash -eহিসাবে একই প্রভাব #/bin/bashলাইন # 1 এবং set -e# 2 লাইনে?
ব্লু

উত্তর:


34

ত্রুটি প্রস্থান। আরও পতাকা

যদি কোনও ত্রুটি থাকে তবে এটি এখনই প্রস্থান করবে।

$? পূর্ববর্তী কমান্ডের প্রস্থান স্থিতি। লিনাক্সে 0 এর প্রস্থান স্থিতির অর্থ হ'ল কমান্ডটি সফল হয়েছিল। অন্য কোনও স্থিতির অর্থ একটি ত্রুটি ঘটেছে।

উদাহরণস্বরূপ "^ ব্যবহারকারীর নাম" / etc / passwd> / dev / null / etc / passwd ফাইলের অধীনে ব্যবহারকারীর নামটি অনুসন্ধান করবে। যদি এটি এটি খুঁজে পায় তবে প্রস্থান স্থিতি $? 0 এর সমান হবে it


এছাড়াও, আপনি স্ক্রিপ্টটি প্রথম দুটি লাইন দিয়ে প্রতিস্থাপন করে -e ছাড়াই সঠিকভাবে কাজ করতে পারবেন if egrep "^username" /etc/passwd >/dev/null

1
setযদিও প্রয়োজন নেই কেন ? : - /

1
@pst: কারণ -eকমান্ড-লাইন আর্গুমেন্ট হিসাবে বাশকে দেওয়া হয়েছে। এর অধীনে তালিকাভুক্ত সমস্ত বিকল্পগুলি setতার কমান্ড লাইনে বাশ দ্বারা স্বীকার করা হবে - ম্যানুয়াল পৃষ্ঠার বিভাগে বিকল্পগুলির প্রথম বাক্যটি নোট করুন ।
মাধ্যাকর্ষণ

14

সমস্ত ব্যাশ কমান্ড লাইন সুইচ নথিভুক্ত করা হয় man bash

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

2
আহা। আমি লোকটির মধ্যে এটির সন্ধান করেছি, তবে ফাইল পরীক্ষাগুলিতে সন্ধান করার পরে এবং আমি মূল তর্ক ছাড়িনি। চমৎকার অংশ। setযদিও প্রয়োজন নেই কেন ? : - /

1

আপনার স্ক্রিপ্ট ভুল, কারণ

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  #echo "doesn't exist" # WRONG
  echo "the USER EXISTS"
fi

প্রস্থান স্থিতি 0 - গড় - সবকিছু ঠিক আছে, গ্রেপের ক্ষেত্রে "ঠিক আছে, স্ট্রিংটি পাওয়া গেছে"। প্রস্থান স্থিতি! = 0 অর্থ কিছু ভুল, গ্রেপ 1 এর ক্ষেত্রে, "পাওয়া যায়নি", 2 এর অর্থ "ইনপুট খুলতে পারে না" ...

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