আমার সমাধানের সুপারিশের পটভূমি হ'ল এক বন্ধুর গল্প, যিনি তার প্রথম কাজের দ্বিতীয় সপ্তাহের মধ্যে, অর্ধ বিল্ড-সার্ভার পরিষ্কার করেছিলেন। সুতরাং মূল কাজটি হ'ল কোনও ফাইল উপস্থিত রয়েছে কিনা তা নির্ধারণ করা এবং যদি তা হয় তবে আসুন এটি মুছুন। তবে এই নদীতে কয়েকটি বিশ্বাসঘাতক র্যাপিড রয়েছে:
সবকিছুই একটি ফাইল।
স্ক্রিপ্টগুলির আসল ক্ষমতা কেবল যদি তারা সাধারণ কাজগুলি সমাধান করে
সাধারণ হতে, আমরা ভেরিয়েবল ব্যবহার করি
ম্যানুয়াল হস্তক্ষেপ এড়াতে আমরা প্রায়শই স্ক্রিপ্টগুলিতে শক্তি প্রয়োগ করি
এবং ভালবাসা-র পুনরুত্পাদনকারীকে আমরা নিশ্চিত করি যে আমরা সময় মতো ফ্যাশনে তৈরি করি, অনুলিপি করি এবং ধ্বংস করি।
নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:
আমাদের মুছে ফেলার ফাইলটি রয়েছে: 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)