ஷெல் ஸ்கிரிப்டிங்கிற்கான தொடக்க வழிகாட்டி 2: லூப்களுக்கு
உங்கள் கீக் க்ரெட்டை உருவாக்க விரும்பினால், எங்கள் ஷெல் ஸ்கிரிப்டிங் தொடரின் இரண்டாவது தவணைக்கு எங்களுடன் சேருங்கள். எங்களிடம் சில திருத்தங்கள், கடந்த வார ஸ்கிரிப்ட்டில் சில மேம்பாடுகள் மற்றும் அறிமுகமில்லாதவர்களுக்கான லூப்பிங் குறித்த வழிகாட்டி உள்ளது.
datecp ஸ்கிரிப்ட் மறுபரிசீலனை செய்யப்பட்டது
இல் எங்கள் ஷெல் ஸ்கிரிப்டிங் வழிகாட்டியின் முதல் தவணை , கோப்பின் பெயரின் முடிவில் தேதியைச் சேர்த்த பிறகு, ஒரு கோப்பை காப்புப் பிரதி கோப்பகத்தில் நகலெடுக்கும் ஸ்கிரிப்டை உருவாக்கினோம்.
சாமுவேல் டியோன்-ரியல் கருத்துக்களில் எங்கள் மாறி குறிப்புகளைக் கையாள ஒரு சிறந்த வழி உள்ளது என்று சுட்டிக்காட்டினார்.
வாதங்கள் பாஷ் ஷெல்லில் இடம் பிரிக்கப்பட்டிருக்கும், இதன் விளைவாக விரிவாக்கப்பட்ட கட்டளையில் இடம் இருக்கும்போது அது டோக்கனைஸ் செய்யும். உங்கள் ஸ்கிரிப்ட்டில், |_+_| விரிவாக்கப்பட்ட மாறிகள் அவற்றில் இடைவெளிகளைக் கொண்டிருக்காத வரை உத்தேசித்தபடி செயல்படும். உங்கள் ஸ்கிரிப்டை இவ்வாறு அழைத்தால்: |_+_| விரிவாக்கம் இந்த கட்டளையை விளைவிக்கும்: |_+_| இதில் உண்மையில் 6 வாதங்கள் உள்ளன.
இந்த சிக்கலை சரியாக தீர்க்க, ஸ்கிரிப்ட்டின் கடைசி வரி: |_+_|
நீங்கள் பார்க்க முடியும் என, எங்கள் ஸ்கிரிப்ட்டின் வரியை மாற்றுவது:
cp -iv .$date_formatted
செய்ய:
cp -iv .$date_formatted
பெயரில் இடைவெளிகள் உள்ள கோப்புகளில் ஸ்கிரிப்டைப் பயன்படுத்தும் போது இந்தச் சிக்கலைக் கவனித்துக்கொள்ளும். சாமுவேல் இந்த தளத்தில் (அல்லது பொதுவாக இணையத்தில்) குறியீட்டை நகலெடுத்து ஒட்டும்போது, அவற்றை அடிக்கடி மாற்றும் அச்சுக்கலையில் சிறந்தவற்றுக்கு சரியான கோடுகள் மற்றும் மேற்கோள்களை மாற்றுவதை உறுதிப்படுத்திக் கொள்ளுங்கள். எங்கள் குறியீடு நகலெடுக்க/ஒட்டுவதற்கு ஏற்றதாக இருப்பதை உறுதிசெய்ய நாங்கள் இன்னும் பலவற்றைச் செய்வோம். ;-)
மற்றொரு வர்ணனையாளர், Myles Braithwaite, கோப்பு நீட்டிப்புக்கு முன் தேதி தோன்றும் வகையில் எங்கள் ஸ்கிரிப்டை விரிவாக்க முடிவு செய்தார். எனவே அதற்கு பதிலாக
tastyfile.mp3.07_14_11-12.34.56
நாம் இதைப் பெறுவோம்:
விளம்பரம்சுவையான கோப்பு.07_14_11-12.34.56.mp3
இது பெரும்பாலான பயனர்களுக்கு இன்னும் கொஞ்சம் வசதியாக இருக்கும். அவரது குறியீடு கிடைக்கும் அவரது GitHub பக்கம் . கோப்புப் பெயரைப் பிரிக்க அவர் என்ன பயன்படுத்துகிறார் என்பதைப் பார்ப்போம்.
date_formatted=$(தேதி +%Y-%m-%d_%H.%M%S)
file_extension=$(எக்கோ ″|awk -F . ‘{print $NF}’)
file_name=$(அடிப்படை பெயர் .$file_extension)cp -iv $file_name-$date_formatted.$file_extension
நான் வடிவமைப்பை சிறிது மாற்றினேன், ஆனால் மைல்ஸ் தனது தேதி செயல்பாட்டை வரி 1 இல் அறிவிப்பதை நீங்கள் காணலாம். இருப்பினும், வரி 2 இல், கோப்பின் பெயரை வெளியிட ஸ்கிரிப்ட்டின் முதல் வாதத்துடன் எதிரொலி கட்டளையைப் பயன்படுத்துகிறார். அந்த வெளியீட்டை எடுத்து அடுத்த பகுதிக்கு உள்ளீடாகப் பயன்படுத்த பைப் கட்டளையைப் பயன்படுத்துகிறார். குழாய்க்குப் பிறகு, மைல்ஸ் awk கட்டளையை அழைக்கிறார், இது ஒரு சக்திவாய்ந்த பேட்டர்ன் ஸ்கேனிங் நிரலாகும். -F கொடியைப் பயன்படுத்தி, அடுத்த எழுத்து (ஒரு இடைவெளிக்குப் பிறகு) புலப் பிரிப்பானை வரையறுக்கும் என்று கட்டளையைச் சொல்கிறார். இந்த வழக்கில், இது ஒரு காலம்.
இப்போது, awk tastyfile.mp3 என பெயரிடப்பட்ட கோப்பை இரண்டு புலங்கள் கொண்டதாக பார்க்கவும்: tastyfile மற்றும் mp3. கடைசியாக, அவர் பயன்படுத்துகிறார்
‘{print $NF}’
கடைசி புலத்தைக் காட்ட. உங்கள் கோப்பில் பல காலகட்டங்கள் இருந்தால் - எனவே awk பல புலங்களைப் பார்க்கச் செய்கிறது - இது கடைசியாக மட்டுமே காண்பிக்கும், இது கோப்பு நீட்டிப்பு ஆகும்.
வரி 3 இல், அவர் கோப்பின் பெயருக்கு ஒரு புதிய மாறியை உருவாக்கி, எல்லாவற்றையும் இல் குறிப்பிடுவதற்கு அடிப்படைப்பெயர் கட்டளையைப் பயன்படுத்துகிறார். தவிர கோப்பு நீட்டிப்பு. இது அடிப்படைப் பெயரைப் பயன்படுத்தி ஐ அதன் வாதமாகக் கொடுத்து, பின்னர் ஒரு இடைவெளி மற்றும் கோப்பு நீட்டிப்பைச் சேர்ப்பதன் மூலம் செய்யப்படுகிறது. வரி 2ஐக் குறிப்பிடும் மாறியின் காரணமாக கோப்பு நீட்டிப்பு தானாகவே சேர்க்கப்படும். இது என்ன செய்ய வேண்டும்
டேஸ்டிஃபைல்.mp3
மற்றும் அதை மாற்றவும்
சுவையான கோப்பு
பின்னர் கடைசி வரியில், எல்லாவற்றையும் வரிசையாக வெளியிடும் கட்டளையை மைல்ஸ் ஒன்றாக இணைத்தார். ஸ்கிரிப்ட்டின் இரண்டாவது வாதமான க்கு எந்த குறிப்பும் இல்லை என்பதை நினைவில் கொள்ளவும். இந்தக் குறிப்பிட்ட ஸ்கிரிப்ட், சொல்லப்பட்ட கோப்பை உங்கள் தற்போதைய கோப்பகத்தில் நகலெடுக்கும். சிறந்த வேலை சாமுவேல் மற்றும் மைல்ஸ்!
இயங்கும் ஸ்கிரிப்ட்கள் மற்றும் $PATH
ஸ்கிரிப்ட்களை இயல்பாக கட்டளைகளாகக் குறிப்பிட அனுமதிக்கப்படுவதில்லை என்பதையும் எங்கள் அடிப்படைக் கட்டுரையில் குறிப்பிடுகிறோம். அதாவது, ஸ்கிரிப்டை இயக்க, அதன் பாதையை நீங்கள் சுட்டிக்காட்ட வேண்டும்:
விளம்பரம்./கையால் எழுதப்பட்ட தாள்
~/பின்/ஸ்கிரிப்ட்
ஆனால், உங்கள் ஸ்கிரிப்ட்களை ~/bin/ இல் வைப்பதன் மூலம், அவற்றை இயக்குவதற்கு எங்கிருந்தும் அவற்றின் பெயர்களை தட்டச்சு செய்யலாம்.
எந்த நவீன லினக்ஸ் டிஸ்ட்ரோவும் முன்னிருப்பாக அந்தக் கோப்பகத்தை உருவாக்காததால், இது எவ்வளவு சரியானது என்று வர்ணனையாளர்கள் சிறிது நேரம் விவாதித்தனர். மேலும், யாரும் அதை $PATH மாறியில் முன்னிருப்பாகச் சேர்ப்பதில்லை, இதுவே ஸ்கிரிப்ட்கள் கட்டளைகளைப் போல இயங்குவதற்குத் தேவைப்படும். நான் சற்று குழப்பமடைந்தேன், ஏனென்றால் எனது $PATH மாறியை சரிபார்த்த பிறகு, வர்ணனையாளர்கள் சரியாகச் சொன்னார்கள், ஆனால் ஸ்கிரிப்ட்களை அழைப்பது இன்னும் எனக்கு வேலை செய்தது. ஏன் என்று நான் கண்டுபிடித்தேன்: பல நவீன லினக்ஸ் டிஸ்ட்ரோக்கள் பயனரின் ஹோம் டைரக்டரியில் ஒரு சிறப்பு கோப்பை உருவாக்குகின்றன - .profile.
இந்தக் கோப்பு பாஷ் மூலம் படிக்கப்படும் (பயனரின் முகப்பு கோப்பகத்தில் .bash_profile இல்லையெனில்) மற்றும் கீழே, $PATH மாறியில் ~/bin/ கோப்புறையைச் சேர்க்கும் பிரிவு உள்ளது. அதனால், அந்த மர்மம் விலகியது. மீதமுள்ள தொடரில், ~/பின்/ கோப்பகத்தில் ஸ்கிரிப்ட்களை வைப்பதைத் தொடர்வேன், ஏனெனில் அவை பயனர் ஸ்கிரிப்டுகள் மற்றும் பயனர்களால் இயக்கப்பட வேண்டும். மேலும், விஷயங்களைச் செயல்படுத்துவதற்கு நாம் உண்மையில் $PATH மாறியைக் கையால் குழப்ப வேண்டிய அவசியமில்லை.
சுழல்களுடன் கட்டளைகளை மீண்டும் செய்யவும்
கீக் ஆயுதக் களஞ்சியத்தில் மீண்டும் மீண்டும் செய்யும் பணிகளைக் கையாள்வதற்கான மிகவும் பயனுள்ள கருவிகளில் ஒன்றைப் பெறுவோம்: சுழல்கள். இன்று, நாம் சுழல்கள் பற்றி விவாதிப்போம்.
ஃபார்-லூப்பின் அடிப்படை அவுட்லைன் பின்வருமாறு:
பட்டியலில் VARIABLE க்கு; செய்
கட்டளை1
கட்டளை2
...
கட்டளை
முடிந்தது
VARIABLE என்பது எந்த மாறியாக இருக்கலாம், இருப்பினும் பெரும்பாலும் சிற்றெழுத்து i மாநாட்டால் பயன்படுத்தப்படுகிறது. LIST என்பது பொருட்களின் பட்டியல்; நீங்கள் பல உருப்படிகளைக் குறிப்பிடலாம் (அவற்றை ஒரு இடைவெளியால் பிரிக்கலாம்), வெளிப்புற உரைக் கோப்பைச் சுட்டிக்காட்டலாம் அல்லது தற்போதைய கோப்பகத்தில் உள்ள எந்தக் கோப்பையும் குறிக்க நட்சத்திரக் குறியைப் (*) பயன்படுத்தலாம். பட்டியலிடப்பட்ட கட்டளைகள் மாநாட்டின்படி உள்தள்ளப்பட்டவை, எனவே கூடு கட்டுவதைப் பார்ப்பது எளிது - சுழல்களில் சுழல்களை வைப்பது (எனவே நீங்கள் லூப் செய்யும் போது லூப் செய்யலாம்).
விளம்பரம்பட்டியல்கள் ஸ்பேஸ்களை டிலிமிட்டர்களாகப் பயன்படுத்துவதால் - அதாவது, ஸ்பேஸ் என்பது பட்டியலில் உள்ள அடுத்த உருப்படிக்கு நகர்வதைக் குறிக்கிறது - பெயரில் இடைவெளிகளைக் கொண்ட கோப்புகள் மிகவும் நட்பானவை அல்ல. இப்போதைக்கு, இடைவெளிகள் இல்லாத கோப்புகளுடன் பணிபுரிவோம். தற்போதைய கோப்பகத்தில் கோப்புகளின் பெயர்களைக் காட்ட எளிய ஸ்கிரிப்ட் மூலம் தொடங்குவோம். உங்கள் ~/பின்/ கோப்புறையில் லூப்ஸ்கிரிப்ட் என்ற தலைப்பில் புதிய ஸ்கிரிப்டை உருவாக்கவும். இதை எப்படி செய்வது என்று உங்களுக்கு நினைவில் இல்லை என்றால் (இதை இயக்கக்கூடியதாகக் குறிப்பது மற்றும் ஹாஷ் பேங் ஹேக்கைச் சேர்ப்பது உட்பட) எங்களைப் பார்க்கவும் பாஷ் ஸ்கிரிப்டிங் அடிப்படைகள் கட்டுரை .
அதில், பின்வரும் குறியீட்டை உள்ளிடவும்:
i க்கு item1 item2 item3 item4 item5 item6; செய்
எதிரொலி $i
முடிந்தது
நீங்கள் ஸ்கிரிப்டை இயக்கும்போது, அந்த பட்டியல் உருப்படிகளை வெளியீட்டாகப் பெற வேண்டும்.
மிகவும் எளிமையானது, இல்லையா? கொஞ்சம் கொஞ்சமாக மாற்றினால் என்ன நடக்கும் என்று பார்ப்போம். உங்கள் ஸ்கிரிப்டை மாற்றவும், அது இவ்வாறு கூறுகிறது:
நான் * இல்; செய்
எதிரொலி $i
முடிந்தது
இந்த ஸ்கிரிப்டை ஒரு கோப்புறையில் இயக்கும்போது, அதில் உள்ள கோப்புகளின் பட்டியலை வெளியீட்டாகப் பெற வேண்டும்.
இப்போது, எக்கோ கட்டளையை மிகவும் பயனுள்ள ஒன்றாக மாற்றுவோம் - ஜிப் கட்டளை என்று சொல்லுங்கள். அதாவது, ஒரு காப்பகத்தில் கோப்புகளைச் சேர்ப்போம். மேலும், கலவையில் சில வாதங்களைப் பெறுவோம்!
நான் $@ இல்; செய்
zip காப்பகம் $i
முடிந்தது
புதிதாக ஒன்று இருக்கிறது! $@ என்பது … $nக்கான குறுக்குவழி. வேறு வார்த்தைகளில் கூறுவதானால், நீங்கள் குறிப்பிட்ட அனைத்து வாதங்களின் முழு பட்டியல் இது. இப்போது, நான் பல உள்ளீட்டு கோப்புகளுடன் ஸ்கிரிப்டை இயக்கும்போது என்ன நடக்கிறது என்பதைப் பாருங்கள்.
எனது கோப்புறையில் எந்த கோப்புகள் உள்ளன என்பதை நீங்கள் பார்க்கலாம். நான் ஆறு வாதங்களுடன் கட்டளையை இயக்கினேன், மேலும் ஒவ்வொரு கோப்பும் archive.zip என்ற ஜிப் செய்யப்பட்ட காப்பகத்தில் சேர்க்கப்பட்டது. எளிதானது, சரியா?
சுழல்கள் மிகவும் அற்புதமானவை. இப்போது நீங்கள் கோப்புகளின் பட்டியல்களில் தொகுதி செயல்பாடுகளை இயக்கலாம். எடுத்துக்காட்டாக, உங்கள் ஸ்கிரிப்ட்டின் அனைத்து வாதங்களையும் ஜிப் செய்யப்பட்ட காப்பகத்தில் நகலெடுக்கலாம், அசல்களை வேறு கோப்புறைக்கு நகர்த்தலாம் மற்றும் தானாகவே பாதுகாப்பான நகல் அந்த zip கோப்பை தொலை கணினிக்கு. நீங்கள் SSH உடன் முக்கிய கோப்புகளை அமைத்தால், உங்கள் கடவுச்சொல்லை உள்ளிட வேண்டிய அவசியமில்லை, மேலும் ஜிப் கோப்பை பதிவேற்றிய பிறகு அதை நீக்குமாறு ஸ்கிரிப்ட்டிடம் சொல்லலாம்!
for-loops ஐப் பயன்படுத்துவது ஒரு கோப்பகத்தில் உள்ள அனைத்து கோப்புகளுக்கும் பல செயல்களைச் செய்வதை எளிதாக்குகிறது. நீங்கள் பலவிதமான கட்டளைகளை ஒன்றாக அடுக்கி, வாதங்களை மிக எளிதாகப் பயன்படுத்தி, பட்டியலை உருவாக்கலாம், மேலும் இது பனிப்பாறையின் முனை மட்டுமே.
பேஷ் ஸ்கிரிப்டர்கள், உங்களிடம் ஏதேனும் பரிந்துரைகள் உள்ளதா? லூப்களைப் பயன்படுத்தும் பயனுள்ள ஸ்கிரிப்டை உருவாக்கியுள்ளீர்களா? தொடரைப் பற்றிய உங்கள் எண்ணங்களைப் பகிர்ந்து கொள்ள விரும்புகிறீர்களா? சில கருத்துகளை விடுங்கள் மற்றும் பிற ஸ்கிரிப்ட்டிங் புதியவர்களுக்கு உதவுங்கள்!
அடுத்து படிக்கவும்- & rsaquo; லினக்ஸில் Zenity மூலம் எளிய வரைகலை ஷெல் ஸ்கிரிப்ட்களை உருவாக்குவது எப்படி
- & rsaquo; ஷெல் ஸ்கிரிப்டிங்கிற்கான ஆரம்ப வழிகாட்டி 4: நிபந்தனைகள் மற்றும் என்றால்-பின் அறிக்கைகள்
- › HTG ஐக் கேளுங்கள்: ப்ளூ ஸ்கிரீன் குறியீடுகளைப் படித்தல், உங்கள் கணினியை சுத்தம் செய்தல் மற்றும் ஸ்கிரிப்டிங்கைத் தொடங்குதல்
- & rsaquo; ஷெல் ஸ்கிரிப்டிங்கிற்கான தொடக்க வழிகாட்டி 3: மேலும் அடிப்படை கட்டளைகள் & சங்கிலிகள்
- › 2011 இன் சிறந்த அழகற்ற வழிகாட்டிகள்
- › கணினி கோப்புறை 40: ஜெராக்ஸ் ஸ்டார் டெஸ்க்டாப்பை எவ்வாறு உருவாக்கியது
- › மைக்ரோசாஃப்ட் எக்செல் இல் ஃபங்ஷன்கள் மற்றும் ஃபார்முலாக்கள்: வித்தியாசம் என்ன?
- › 2021 இல் மூடப்பட்ட உங்கள் Spotify ஐ எவ்வாறு கண்டுபிடிப்பது