பாஷ் 'ஃபார்' லூப்: பயிற்சி மற்றும் எடுத்துக்காட்டுகள்

பாஷ் (போர்ன் அகெய்ன் ஷெல்) என்பது குனு/லினக்ஸ் இயக்க முறைமைகளில் ஷெல் கட்டளை வரியில் மற்றும் ஸ்கிரிப்டிங் மொழியாகும். இது பெரும்பாலான லினக்ஸ் விநியோகங்களுக்கான இயல்புநிலை ஷெல் ஆகும்.

பெரும்பாலான ஸ்கிரிப்டிங் மொழிகளைப் போலவே, பாஷ் இதே போன்ற பணிகளை பல முறை செய்ய லூப் தொடரியல் வழங்குகிறது. இந்த கட்டுரையில், அதை எவ்வாறு பயன்படுத்துவது என்பதைக் கற்றுக்கொள்வோம் க்கான பாஷில் வளையம்.

அறிமுகம்

ஒரு பொதுவான பாஷ் ஸ்கிரிப்ட், ஒன்றன் பின் ஒன்றாக செயல்படுத்தப்பட வேண்டிய கட்டளைகளின் வரிசையைக் கொண்டுள்ளது. சரங்கள், முழு எண் குறியீட்டு மதிப்புகள், ஒரு கட்டளையின் முடிவுகள் போன்றவற்றை சேமிக்க மாறிகள் பயன்படுத்தப்படலாம். பயனர் குறிப்பிட்ட கட்டளையை பலமுறை இயக்க விரும்பும் போது லூப்கள் தேவைப்படும். ஒரு கட்டளையின் வெளியீடு பட்டியல் வடிவத்தில் இருக்கும் போது இது குறிப்பாகப் பயன்படுகிறது, மேலும் ஒவ்வொரு முடிவிலும், பட்டியலில், இரண்டாவது கட்டளையை இயக்க வேண்டும்.

பொது தொடரியல்

க்கான பொதுவான தொடரியல் க்கான பாஷில் உள்ள லூப்:

இன் டூ ...... முடிந்தது

இங்கே, தி ஒரு பாஷ் மாறி, இது செல்லுபடியாகும் லினக்ஸ் ஷெல் மாறி பெயராக இருக்க வேண்டும், அதாவது, பெயர் எழுத்துக்கள் (az, AZ), எண்கள் (0-9) மற்றும் அடிக்கோடிட்டு (_ ) ஆகியவற்றின் கலவையைக் கொண்டுள்ளது, மேலும் இது ஒரு எழுத்தில் தொடங்க வேண்டும் அல்லது ஒரு அடிக்கோடிட்டு.

தி லூப் செய்யப்படும் முழு எண் குறியீடுகளின் தனிப்பயன் வரம்பு அல்லது முழு எண்கள் அல்லது சரங்களின் தனிப்பயன் பட்டியல். இது மற்றொரு லினக்ஸ் கட்டளையையும் கொண்டிருக்கலாம், இருப்பினும், அத்தகைய கட்டளையின் வெளியீடு இடைவெளிகள் அல்லது புதிய வரி எழுத்துக்களால் பிரிக்கப்பட வேண்டும், அதாவது, ஒரு பட்டியலில் பாஷ் மூலம் பாகுபடுத்தப்படும் (Bash இல் உள்ள ஒரு பட்டியல் அடிப்படையில் ஒரு இடைவெளி அல்லது புதிய வரியால் பிரிக்கப்பட்ட மதிப்புகளின் தொகுப்பாகும். )

எந்த கட்டளை(கள்) செயல்படுத்தப்பட வேண்டுமோ அதை உள்ளே வைக்க வேண்டும் செய்..முடிந்தது தொகுதி.

சில எளிய உதாரணங்களைப் பார்ப்போம்.

முழு எண் மதிப்புகளின் வரம்பில் லூப்பிங்: பின்வரும் குறியீடு dir1, dir2, dir3 என்ற அடைவுகளை dir10 வரை உருவாக்குகிறது.

நான் {1..10} இல் mkdir dir$i செய்தேன்

நிலையான மதிப்புகளின் பட்டியலில் லூப்பிங்: பின்வரும் குறியீடு கொடுக்கப்பட்ட நிலையான பட்டியலில் உள்ள ஒவ்வொரு சரம் அல்லது முழு எண்ணையும் அச்சிடுகிறது.

நான் ஹலோ 1 2 3 க்கு வருகிறேன்! எதிரொலி $நான் செய்தேன்

ஒரு கட்டளையின் வெளியீட்டில் லூப்பிங்: பின்வரும் குறியீடு வெளியீட்டின் மீது சுழல்கிறது ls கொடுக்கப்பட்ட வடிவத்தில் ஒவ்வொரு கோப்பின் பெயரையும் அச்சிடுகிறது.

நான் `ls` டூ எக்கோ "கோப்பின் பெயர் $i" ஆனது

வெளிப்பாடு அடிப்படையிலான தொடரியல்

சி நிரலாக்க மொழியைப் போன்ற வெளிப்பாடு அடிப்படையிலான தொடரியல் பாஷிலும் சாத்தியமாகும்:

((வெளிப்பாடு 1; வெளிப்பாடு 2; வெளிப்பாடு 3)) செய்ய ... ... முடிந்தது

இங்கே, வெளிப்பாடு 1 குறியீட்டு மாறி(களின்) துவக்கமாகும். வெளிப்பாடு 2 லூப் வெளியேற வேண்டிய நிலை; இந்த நிலை ஒவ்வொரு மறு செய்கையிலும் சரிபார்க்கப்படுகிறது. வெளிப்பாடு 3 குறியீட்டு மாறி(களின்) மதிப்பில் அதிகரிப்பு/குறைவு/மாற்றம் ஆகியவற்றைக் குறிப்பிடுகிறது

பின்வரும் எடுத்துக்காட்டு 0 முதல் 4 வரையிலான மதிப்புகளை அச்சிடுகிறது:

க்கு ((i=0;i<5;i++)) எதிரொலி $i முடிந்தது

பின்வரும் எடுத்துக்காட்டு ஒரு எல்லையற்ற சுழற்சியை உருவாக்குகிறது, ஏனெனில் வெளிப்பாடுகள் எதுவும் குறிப்பிடப்படவில்லை:

(( ; )) எதிரொலி செய்ய "நிறுத்த Ctrl-C ஐ அழுத்தவும்" முடிந்தது

உடைத்து தொடரவும்

நிபந்தனை வெளியேற்றத்திற்கான பிரேக் ஸ்டேட்மெண்ட்

நிபந்தனை அறிக்கையையும் பயன்படுத்தலாம் என்றால் வளைய உள்ளே. தி என்றால் அறிக்கையை a உடன் பயன்படுத்தலாம் உடைக்க லூப்பில் இருந்து நிபந்தனையுடன் வெளியேறுவதற்கான அறிக்கை.

க்கு ((i=0;i<10;i++)) என்றால் [[ $i -eq 5 ]] பிறகு வேறு எக்கோ $i ஐ உடைக்கவும்; முடிந்தது

மேலே உள்ள லூப் 0 முதல் 4 வரையிலான எண்களை அச்சிடும். பிறகு i இன் மதிப்பு 5 ஆக இருக்கும் போது, ​​அது லூப்பில் இருந்து வெளியேறும். ஒரு கட்டளை ஒரு குறிப்பிட்ட வெளியீட்டைக் கொடுக்கும்போது ஒரு லூப் வெளியேறும் போது இது குறிப்பாகப் பயன்படுகிறது. எடுத்துக்காட்டாக, ஒரு வெற்று கோப்பைக் கண்டால் பின்வரும் வளையம் உடைந்து விடும்.

`ls` do flen=`wc -c $file` இல் உள்ள கோப்பிற்கு [[ "$flen" = "0 $file" ]] எனில், "$file காலியாக உள்ளது" எனில் எக்கோ "$file காலியாக உள்ளது" இல்லையெனில் எதிரொலி $flen fi முடிந்தது 

கட்டளை wc -c கோப்பில் உள்ள வரிகளின் எண்ணிக்கையை அச்சிடுகிறது . இது வடிவத்தில் அச்சிடுகிறது , உதாரணத்திற்கு, 10 test.txt. கோடுகளின் எண்ணிக்கை 0 ஆக இருக்கும் போது, ​​அதாவது ஒரு வெற்றுக் கோப்பாக இருக்கும் போது, ​​லூப்பில் இருந்து வெளியேறுகிறோம்.

நிபந்தனையுடன் மறு செய்கையைத் தவிர்க்க அறிக்கையைத் தொடரவும்

சி மற்றும் பல நிரலாக்க மொழிகளைப் போலவே, பாஷிலும் ஒரு உள்ளது தொடரவும் அறிக்கை, ஒரு குறிப்பிட்ட நிபந்தனை திருப்தி அடைந்தால், ஒரு சுழற்சியில் மறு செய்கையின் மீதமுள்ள பகுதியைத் தவிர்ப்பது.

க்கு ((i=0;i<10;i++)) என்றால் [[ $i -eq 5 ]] பின் தொடரவும் fi எதிரொலி $i; முடிந்தது

மேலே உள்ள லூப் 5 ஐத் தவிர, 0 முதல் 10 வரையிலான எண்களை அச்சிடும், ஏனெனில் மறு செய்கையின் போது i=5 ஒரு தொடர் அறிக்கை உள்ளது, இது லூப்பில் மீதமுள்ள குறியீட்டை மறு செய்கையுடன் தொடக்கத்தில் தவிர்க்கும் i=6.

பின்வரும் எடுத்துக்காட்டில், ஒரு கோப்பில் உள்ள வரிகளின் எண்ணிக்கையை அச்சிடுகிறோம், மேலும் ஒரு குறிப்பிட்ட மறு செய்கை செய்யும் தொடரவும் அது ஒரு கோப்பகம் மற்றும் ஒரு கோப்பு அல்ல.

`ls` இல் உள்ள கோப்புக்கு [[ -d $file ]] எனில், fi wc -c "$file" ஐத் தொடரவும்

[[ -d $file ]] கோப்பு ஒரு கோப்பகமா என்பதை சரிபார்க்கிறது. அது இருந்தால், அடுத்த கோப்பிற்கு, அதாவது அடுத்த மறு செய்கைக்குச் செல்வோம். இது ஒரு கோப்பகமாக இல்லாவிட்டால், கோப்பில் உள்ள வரிகளின் எண்ணிக்கையைப் பயன்படுத்தி அச்சிடுகிறோம் wc கட்டளை, முன்பு காட்டப்பட்டது போல்.

சுழல்களைப் பயன்படுத்துதல்: ஸ்கிரிப்டுகள் மற்றும் கட்டளை வரி

லூப் தொடரியல் நேரடியாக பாஷ் ஷெல்லில் அல்லது ஷெல் ஸ்கிரிப்ட் கோப்பிலிருந்து பயன்படுத்தப்படலாம். ஒரு முறை க்கான லூப் தொடரியல் ஷெல்லில் உள்ளிடப்பட்டுள்ளது, லூப் செய்யப்பட வேண்டிய கட்டளைகளை பயனர் தொடர அனுமதிக்க ஷெல் தொடர்ந்து கேட்கும்.

அல்லது பயனர் இதை ஸ்கிரிப்ட் கோப்பில் சேமித்து ஸ்கிரிப்ட் கோப்பை இயக்கலாம்.

தி #!/பின்/பாஷ் தொடக்கத்தில் கோப்பு செயல்படுத்தப்படும் போது பயன்படுத்தப்படும் மொழிபெயர்ப்பாளரைக் குறிப்பிடுகிறது. பாஷ் என்பது இப்போதெல்லாம் பொதுவாகப் பயன்படுத்தப்படும் ஷெல் என்றாலும், சில பயனர்கள் ஷெல்களை விரும்புகிறார்கள் zsh, இந்தக் கோப்பின் தொடக்கத்தில் பாஷுக்குப் பதிலாக இது குறிப்பிடப்பட வேண்டும்.

இயக்க அனுமதிகளை வழங்க இந்த கோப்பிற்கு, இயக்கவும்:

chmod +x test.sh

இறுதியாக, கோப்பை இயக்க, ஓடு:

./test.sh

முடிவுரை

தி க்கான லூப் இன் பாஷ் மிகவும் எளிமையான அம்சமாகும், ஆனால் கிட்டத்தட்ட எல்லா வகையான சிக்கலான ஸ்கிரிப்டிங் சூழ்நிலையிலும் அதன் பயன்பாடு உள்ளது. நீங்கள் வழக்கமான அல்லது மேம்பட்ட லினக்ஸ் பயனராக இருந்தாலும் அல்லது கணினி நிர்வாகம் மற்றும் DevOps பணிகளுக்கான ஆட்டோமேஷனைக் கற்றுக்கொள்ளத் தொடங்கினாலும் அதைக் கற்றுக்கொள்வது நீண்ட தூரம் செல்லும்.