shell - meaning - শেল স্ক্রিপ্টে কোনও ফাইল উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন
shell meaning in bengali (4)
অভ্যন্তরীণভাবে, আরএম কমান্ডটি অবশ্যই ফাইল অস্তিত্বের জন্য পরীক্ষা করতে হবে,
তাহলে কেন আরেকটি পরীক্ষা যুক্ত করবেন?
শুধু ইস্যু
rm filename
এবং সেখানে ছিল কিনা তা পরে চলে যাবে not
আরএম-ফ ব্যবহার করুন আপনি কি অস্তিত্বহীন ফাইলগুলি সম্পর্কে কোনও বার্তা চান না।
যদি ফাইলটি উপস্থিত না থাকে তবে আপনাকে যদি কিছু পদক্ষেপ নিতে হয় তবে আপনাকে অবশ্যই এটি পরীক্ষা করতে হবে। আপনার উদাহরণ কোডের ভিত্তিতে, এই দৃষ্টান্তে এটি হয় না।
আমি একটি শেল স্ক্রিপ্ট লিখতে চাই যা এটি পরীক্ষা করে রাখে যে কোনও নির্দিষ্ট ফাইল,
archived_sensor_data.json
, উপস্থিত রয়েছে এবং যদি তা থাকে তবে এটি মুছে ফেলে।
http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html
অনুসরণ করে, আমি নিম্নলিখিতগুলি চেষ্টা করেছি:
[-e archived_sensor_data.json] && rm archived_sensor_data.json
তবে এটি একটি ত্রুটি ছুড়ে ফেলে
[-e: command not found
যখন আমি
./test_controller
কমান্ডটি ব্যবহার করে ফলাফলের
test_controller
স্ক্রিপ্টটি চালানোর চেষ্টা করি।
কোডটিতে কী ভুল?
আপনি বন্ধনী এবং
-e
মধ্যে একটি প্রয়োজনীয় স্থান মিস করছেন:
#!/bin/bash
if [ -e x.txt ]
then
echo "ok"
else
echo "nok"
fi
আমার সমাধানের সুপারিশের পটভূমি হ'ল এক বন্ধুর গল্প, যিনি তার প্রথম কাজের দ্বিতীয় সপ্তাহের মধ্যে, অর্ধ বিল্ড-সার্ভার পরিষ্কার করেছিলেন। সুতরাং মূল কাজটি হ'ল কোনও ফাইল উপস্থিত রয়েছে কিনা তা নির্ধারণ করা এবং যদি তা হয় তবে আসুন এটি মুছুন। তবে এই নদীতে কয়েকটি বিশ্বাসঘাতক র্যাপিড রয়েছে:
-
সবকিছুই একটি ফাইল।
-
স্ক্রিপ্টগুলির আসল ক্ষমতা কেবল যদি তারা সাধারণ কাজগুলি সমাধান করে
-
সাধারণ হতে, আমরা ভেরিয়েবল ব্যবহার করি
-
ম্যানুয়াল হস্তক্ষেপ এড়াতে আমরা প্রায়শই স্ক্রিপ্টগুলিতে শক্তি প্রয়োগ করি
-
এবং ভালবাসা-র পুনরাবৃত্তিকে আমরা সময় মতো ফ্যাশনে তৈরি করি, অনুলিপি করি এবং তা নষ্ট করি তা নিশ্চিত করে।
নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:
আমাদের মুছে ফেলার ফাইলটি রয়েছে: filesexists.json
এই ফাইলের নামটি একটি ভেরিয়েবলে সংরক্ষণ করা হয়
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
জিনিসগুলিকে সত্যিই নমনীয় করে তোলার জন্য আমরা একটি পথের পরিবর্তনশীলও আছি va
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
সুতরাং আসুন দেখা যাক
-e
এটি করার কথা বলে কি করে।
ফাইলগুলি কি বিদ্যমান?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
এটা করে. ম্যাজিক।
যাইহোক, যদি ফাইল ভেরিয়েবলটি দুর্ঘটনাক্রমে নফিনে মূল্যায়ন করা হয় তবে কি হবে?
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
কি? এটি একটি ত্রুটি নিয়ে ফিরে আসার কথা ... এবং কীভাবে পুরো ফোল্ডারটি দুর্ঘটনাক্রমে মুছে ফেলা হয়েছে তা গল্পের শুরু
একটি বিকল্প হতে পারে যা আমরা একটি 'ফাইল' হতে বুঝি তার জন্য বিশেষভাবে পরীক্ষা করা
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
সুতরাং ফাইল উপস্থিত ...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
সুতরাং এটি কোনও ফাইল নয় এবং সম্ভবত, আমরা পুরো ডিরেক্টরিটি মুছতে চাই না
man test
নিম্নলিখিত কথাগুলি রয়েছে:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)
ls
ব্যবহার করে এখানে একটি বিকল্প পদ্ধতি রয়েছে:
(ls x.txt && echo yes) || echo no
আপনি যদি
ls
থেকে কোনও আউটপুট আড়াল করতে চান তবে আপনি কেবল হ্যাঁ বা না দেখেন,
stdout
এবং
stderr
/dev/null
stderr
পুনঃনির্দেশ করুন:
(ls x.txt >> /dev/null 2>&1 && echo yes) || echo no