Tool.Yun
डेवलपर्स के लिए उपयोगी उपकरण
YAML को JSON में परिवर्तित करने वाला कनवर्टर
YAML को सुंदर बनाएं और प्रारूपित करें
YAML फ़्लैटनर/अनफ़्लैटनर
YAML विलय
YAML से TOML में रूपांतरण
HTML को मार्कडाउन में बदलना
Markdown को DOCX में बदलें
tools.markdown-format-converter.name
ईपब से मार्कडाउन
मार्कडाउन अंतर
मार्कडाउन के रूप में पेस्ट करें
मार्कडाउन को एचटीएमएल में बदलें
मार्कडाउन को टेक्स्ट में बदलें
मार्कडाउन टीओसी जनरेटर
मार्कडाउन टेबल जनरेटर
मार्कडाउन टेबल प्रेटिफायर
मार्कडाउन पूर्वावलोकन
मार्कडाउन लोरेम इप्सम
मार्कडाउन संपादक
मार्कडाउन से डेटा
EXIF हटाएं
GIF को MP4 में बदलें
ICO/PNG कनवर्टर
इमेज EXIF/मेटाडेटा/GPS/JPEG क्वालिटी रीडर
एचईआईसी कनवर्टर
एसवीजी पूर्वावलोकनकर्ता
कैमरा रिकॉर्डर
छवि आकार बदलने वाला
छवि और पीडीएफ का OCR परीक्षण करें
छवि की पृष्ठभूमि हटाएं
छवि को SVG में रूपांतरित करें (पोट्रेस)
छवि तुलना
छवि प्रारूप कनवर्टर
छवि रंग इन्वर्टर
छवि सुधारें # क्रॉप इमेज फोटो एडिटर
वाटर-मार्क
ObjGen से HTML
XML लिंटर
XML से JSON में रूपांतरण
XML स्वरूपक
XSLT परीक्षक
एक्सपाथ परीक्षक
Base64 फ़ाइल कनवर्टर
CSV से डेटा
dBm mW कनवर्टर
ईमेल नॉर्मलाइज़र
ऊर्जा खपत और व्यय कंप्यूटर
एक्सेल से डेटा
कई इकाइयों का कनवर्टर
टेक्स्ट को UTF-8 बाइनरी में रूपांतरित करें
टेक्स्ट को यूनिकोड में बदलें
टोरेंट से मैग्नेट तक
डेटा स्टोरेज यूनिट कनवर्टर
पर्यावरण चर प्रारूप कनवर्टर
पूर्णांक आधार कनवर्टर
प्रॉपर्टीज़ कनवर्टर
बेस64 स्ट्रिंग एनकोडर/डिकोडर
बेस64 हेक्स ऐरे एनकोडर/डिकोडर
भौगोलिक निर्देशांक कनवर्टर
यूएलआईडी जनरेटर
यूनिकोड वर्णों को जावा एंटिटी में परिवर्तित करने वाला
रोमन अंक परिवर्तक
Ansible vault crypt decrypt
Bech32 एनकोडर/डिकोडर
ECDSA कुंजी युग्म जनरेटर
Ed25519 कुंजी जोड़ी जनरेटर
RSA एन्क्रिप्शन
RSA कुंजी जोड़ी जनरेटर
RSA/DSA/ECDSA हस्ताक्षरकर्ता और सत्यापनकर्ता
SAML पार्सर
X509 प्रमाणपत्र जनरेटर
आर्गन2 हैशर
एचमैक जनरेटर
एजीई क्रिप्टोग्राफी
एसएसएल प्रमाणपत्र कनवर्टर
जेडब्ल्यूटी जनरेटर
जेडब्ल्यूटी पार्सर
जैसिप्ट स्ट्रिंग एन्क्रिप्शन
टेक्स्ट को एन्क्रिप्ट/डिक्रिप्ट करें
नाइसवेयर बाइट्स से पासफ़्रेज़ तक
पासेटो/पासेर्क लोकल
पासेटो/पासेर्क सार्वजनिक/निजी
पीजीपी एन्क्रिप्शन
पीजीपी कीजेन
पीजीपी फ़ाइल एन्क्रिप्शन
प्रमाणपत्र/कुंजी पार्सर
फ़ाइल हैशर
बीक्रिप्ट
शमीर के गुप्त रहस्यों का साझाकरण
सीआरसी कैलकुलेटर
सीएसआर जनरेटर
हैश टेक्स्ट
गणित ओसीआर
गणित प्रारूप कनवर्टर
गणित मूल्यांकनकर्ता
टिप कैलकुलेटर
त्रिकोणमितीय/समीकरण वक्र दृश्यक
बाइनरी कैलकुलेटर
क्रॉन एक्सप्रेशन बिल्डर
JSONPath सिंटैक्स चीटशीट
K8 चीटशीट
Nginx चीटशीट
Tmux कमांड चीटशीट
VIM चीटशीट
XPath सिंटैक्स चीटशीट
chmod कमांड चीटशीट
गिट चीटशीट
गिट सिमेंटिक कमिट चीटशीट
ज़ेलिज कमांड चीटशीट
जेक्यू चीटशीट
डॉकर कंपोज़ चीटशीट
डॉकर चीटशीट
डॉकर स्वार्म चीटशीट
डॉकरफ़ाइल चीटशीट
नैनो चीटशीट
पॉवरशेल चीटशीट
बैश चीटशीट
मार्कडाउन चीट शीट
रेगुलर एक्सप्रेशन चीटशीट
सामान्य रेगुलर एक्सप्रेशन चीटशीट
सीएसएस सिलेक्टर्स चीटशीट
सेड चीटशीट
स्क्रीन कमांड चीटशीट
कार्ड पिकर
पासा रोलर
भाग्य का पहिया
सिक्का पलटने वाला
CSV से JSON में रूपांतरण
JS से JSON कनवर्टर
JSON to Go
JSON अंतर
JSON आकार विश्लेषक
JSON एस्केपर/अनएस्केपर
JSON को .env फ़ाइल में बदलें
JSON को C# में रूपांतरित करना
JSON को CSV में बदलें
JSON को JS में परिवर्तित करने वाला कनवर्टर
JSON को PHP कोड में परिवर्तित करें
JSON को PHP-Array में बदलना
JSON को Python में परिवर्तित करें
JSON को YAML में परिवर्तित करने वाला कनवर्टर
JSON को ऑब्जेक्ट में परिवर्तित करें
JSON को सुंदर बनाना और प्रारूपित करना
JSON क्वेरी
JSON फ़्लैटनर/अनफ़्लैटनर
JSON मिनिफाई
JSON लिंटर
JSON विलय
JSON संपादक
JSON से MessagePack
JSON से SQL DDL
JSON से TOML
JSON से TS
JSON से XML में रूपांतरण
JSON से जावा एंटिटी
JSON से डेटा
JSON से स्कीमा
JSON सॉर्ट मास्टर
JSON स्ट्रिंग कनवर्टर
Jq/JSONPath परीक्षक
ObjGen को JSON में परिवर्तित करें
PHP-Array को JSON में परिवर्तित करना
tools.json-patch.name
संदेश पैक को JSON में बदलें
BIP39 पासफ़्रेज़ जनरेटर
UUID कनवर्टर
UUID जनरेटर
ओटीपी कोड जनरेटर
टोकन जनरेटर
डाइसवेयर पासवर्ड जनरेटर
नैनोआईडी जनरेटर
पासफ़्रेज़ जनरेटर
पिन कोड जनरेटर
यादृच्छिक संख्या जनरेटर
संख्यावाचक नाम जनरेटर
TOML से JSON में रूपांतरण
TOML से YAML
टीओएमएल लिंटर
Docker Compose को .env फ़ाइल में स्थानांतरित करें
कुबेरनेट्स आरबीएसी जनरेटर
ट्रैफ़िक डॉकर कंपोज़ मेकर
डॉकर इंस्पेक्ट से डॉकर रन तक
डॉकर इमेज डाउनलोडर
डॉकर कंपोज़ को डॉकर रन में परिवर्तित करें
डॉकर कंपोज़ फॉर्मेट कनवर्टर
डॉकर कंपोज़ वैलिडेटर
डॉकर कंपोज़ से कुबेरनेट्स तक
डॉकर कंपोज़ से क्वाडलेट्स तक
डॉकर को कुबेरनेट्स पर चलाएं
डॉकर क्वाडलेट्स पर चलता है
डॉकर पैंगोलिन लेबल
डॉकर रन को डॉकर कंपोज़ में परिवर्तित करें
डॉकरफ़ाइल लेबल जनरेटर
ISBN वैलिडेटर और पार्सर
आईईएस प्रकाश दिशानिर्देश
आईएसओ 3166 देश कोड खोजक
आईएसओ 639 खोजकर्ता
आईबैन वैलिडेटर और पार्सर
आरएमबी अपरकेस कनवर्टर
एसएलए कैलकुलेटर
ऑनलाइन शब्दकोश
कैलेंडर कनवर्टर
क्रेडिट कार्ड चेकर
दौड़ने की गति कैलकुलेटर
फ़ोन पार्सर और फ़ॉर्मेटर
बीएमआई कैलकुलेटर
मुद्रा परिवर्तक
यूनिकोड खोज
लुह्न वैलिडेटर
वैट नंबर सत्यापनकर्ता
शेल कमांड की व्याख्या करें
सॉफ़्टवेयर लाइसेंस संगतता
ETA कैलकुलेटर
अवधि कैलकुलेटर
आईकैल विलय
आईसीएएल जनरेटर
आईसीएएल फ़ाइल पार्सर
उलटी गिनती
क्रॉन/सप्ताह के दिन का अलार्म
जिस दिन?
टाइमज़ोन कनवर्टर
टीटीएल कैलकुलेटर
ठीक घड़ी
दिनांक+अवधि कैलकुलेटर
दिनांक-समय परिवर्तक
दिनों की गणना
सप्ताह संख्या परिवर्तक
समय अलार्म
BIMI DNS जनरेटर
Chmod कैलकुलेटर
DMARC DNS जनरेटर
DNS क्वेरीज़
DNSBL चेकर
Htpasswd/htaccess जनरेटर
IPRange/CIDR/IPMask में IPv4-6/IPRange/CIDR
IPv4 पता कनवर्टर
IPv4 रेंज विस्तारक
IPv4 सबनेट कैलकुलेटर
IPv4/6 रेंज को CIDR में बदलने वाला कैलकुलेटर
IPv6 ULA जनरेटर
MAC एड्रेस लुकअप
RAID कैलकुलेटर
RAID विश्वसनीयता कैलकुलेटर
Rsync जनरेटर
Whois चेकर
X-VR-स्पैमकॉज़ डिकोडर
ZPOOL RAID कैलकुलेटर
ZPool चीटशीट
Zxcvbn पासवर्ड की मजबूती
tools.restic-command-generator.name
tools.url-redirection-checker.name
अपाचे लॉगरोटेट जनरेटर
आईपी जियो लोकेशन
आईपी सबनेट एक्सक्लूड कैलकुलेटर
आईपीटेबल्स जनरेटर
आईपीवी4 सबनेट सूची
आईपीवी4/6 सीआईडीआर से आईपी रेंज कैलकुलेटर
आईपीवी6 एड्रेस कनवर्टर
आईपीवी6 सबनेट कैलकुलेटर
एआरपीए डिकोडर
एचएएस सैनिटाइजर
एचटीएसेस जनरेटर
एचडीडी कैलकुलेटर
एनजिनक्स फॉर्मेटर
एफस्टैब जनरेटर
एसआईपी प्राधिकरण
एसपीएफ डीएनएस जनरेटर
कर्ल कमांड जनरेटर
क्रोनटैब जनरेटर
क्लाउडफ्लेयर DNS/RDAP क्वेरीज़
गुनगुनाहट
टीसीपी/यूडीपी पोर्ट परीक्षक
डब्ल्यूपीए पीएसके जनरेटर
डीकेआईएम डीएनएस जनरेटर
डेटा स्थानांतरण दर कैलकुलेटर
पासवर्ड शक्ति विश्लेषक
पीटीआर डीएनएस जनरेटर
पुनीकोड कनवर्टर
पूर्णांकों को IPv4/IPv6 में परिवर्तित करना
फायरवॉलडी कमांड लाइन जनरेटर
बंदरगाह संख्याएँ
बुनियादी प्रमाणीकरण जनरेटर
मल्टी लिंक डाउनलोडर
माइक्रोफ़ोन परीक्षक
मेरा आईपी पता
मैक एड्रेस कनवर्टर
मैक एड्रेस जनरेटर
यूएफडब्ल्यू कमांड जनरेटर
रैंडम पोर्ट जनरेटर
वायरगार्ड कॉन्फ़िगरेशन जनरेटर
विकल्प 43 जनरेटर
विज़ुअल सबनेट कैलकुलेटर
वेबसॉकेट परीक्षण
शटडाउन कमांड जनरेटर
शेल कमांड फॉर्मेटर
शेल कमांड्स लीनियराइज़र
HTML से PDF में रूपांतरण
पीडीएफ एन्क्रिप्ट
पीडीएफ कंप्रेसर
पीडीएफ को डिक्रिप्ट और अनलॉक करें
पीडीएफ टेक्स्ट एक्सट्रैक्टर
पीडीएफ पेज एक्सट्रैक्टर
पीडीएफ लीनियराइज़/फास्टवेब
पीडीएफ संयोजनकर्ता
पीडीएफ हस्ताक्षर परीक्षक
GZip/डिफ्लेट कनवर्टर
HTTPS परीक्षक
MongoDB ऑब्जेक्ट आईडी कनवर्टर
RJ45 Cat6 वायरिंग चीटशीट
आउटलुक एमएसजी पार्सर
आउटलुक सेफलिंक डिकोडर
ईएमवी टीएलवी डिकोडर
ईटीएच लेनदेन डिकोडर
ईमेल पार्सर
एक्टिवडायरेक्टरी एलडीएपी प्रॉपर्टीज सर्चर
एनमैप कमांड बिल्डर
एमआईएम एन्कोडिंग कनवर्टर
कुंजीकोड जानकारी
कुकी पार्सर
टीसीपीडींप जनरेटर
टेक्स्ट कैरेक्टर सेट डिटेक्टर/डिकोडर
डीएनएस परीक्षक
डीएनएस प्रसार परीक्षक
डीएमएआरसी रिपोर्ट विश्लेषक
डेड पिक्सेल परीक्षक
पार्केट फाइल रीडर
प्रतिरोधक कैलकुलेटर
फ़ाइल प्रकार डिटेक्टर
फ्लोटिंग पॉइंट संख्या कनवर्टर
बाउंस ईमेल पार्सर
मध्य-एंडियन कनवर्टर
यूआरएल पार्सर
यूआरएल बिल्डर
लघु यूआरएल विस्तारक
शेयरपॉइंट शेयर यूआरएल डिकोडर
संवेदनशील डेटा मास्कर
सीरियल पोर्ट कंसोल
स्नोफ्लेक आईडी एक्सट्रैक्टर
स्मार्ट रॉ कनवर्टर
हेक्स एनकोडर/डिकोडर
键盘测试器
GTIN वैलिडेटर
tools.epc-qrcode-generator.name
क्यूआर कोड जनरेटर
क्यूआर कोड डिकोडर
क्यूआर संपर्क जानकारी जनरेटर
बारकोड जनरेटर
बारकोड रीडर
वाईफाई क्यूआर कोड जनरेटर
आयतन प्रवाह दर कनवर्टर
ऊर्जा इकाई परिवर्तक
एसआई उपसर्ग कनवर्टर
कोण इकाई कनवर्टर
क्षेत्रफल इकाई परिवर्तक
खाद्य ऊर्जा परिवर्तक
तापमान परिवर्तक
त्वरण कनवर्टर
दबाव इकाई कनवर्टर
द्रव्यमान इकाई परिवर्तक
पावर कनवर्टर
प्रकाश कनवर्टर
फिटनेस कंप्यूटर
फ्रिक्वेंसी परिवर्तक
बल इकाई परिवर्तक
लंबाई इकाई परिवर्तक
वॉल्यूम यूनिट कनवर्टर
स्पीड कन्वर्टर
आस्पेक्ट रेशियो कैलकुलेटर
प्रतिशत कैलकुलेटर
बेंचमार्क निर्माता
भौगोलिक दूरी कैलकुलेटर
JSON से TOON
TOON से JSON
Tab बटन दबाकर Spaces पर जाएं
आरएसवीपी रीडर
इमोजी चयनकर्ता
उद्धरण जनरेटर
एआई के लिए पैक फ़ाइलें
एआई प्रॉम्प्ट स्प्लिटर
एएससीआईआई आर्ट टेक्स्ट जनरेटर
एचटीएमएल से टेक्स्ट निकालें
कीबोर्ड लेआउट कनवर्टर
केस कनवर्टर
छवि को ASCII आर्ट में रूपांतरित करें
ज़ाल्गो जनरेटर/बैनर
जीपीटी टोकन अनुमानक
जीपीटी टोकन एनकोडर/डिकोडर
टेक्स्ट को यूनिकोड नामों में बदलना
डुप्लिकेट लाइन खोजक
नमस्कार, जनरेटर।
नाटो वर्णमाला में पाठ
पाठ अंतर
पाठ अनुवादक
पाठ सांख्यिकी
फ़ॉन्ट तुलना
फ़ोल्डर संरचना आरेख
मत्स्यांगना निर्यातक
मैं और एल चेकर
मोर्स कोड कनवर्टर
यूनिकोड से जीएसएम-7
यूनिकोड स्वरूपक
रूण कनवर्टर
रेगुलर एक्सप्रेशन टेस्टर
रैंडम लाइन पिकर
लेवेनस्टीन कैलकुलेटर
विशिष्ट शब्द
सूचियों की तुलना करें
सूची कनवर्टर
सेड कमांड जनरेटर
सोशल लिंक शेयरर
स्ट्रिंग ऑबफस्केटर
स्मार्ट टेक्स्ट रिप्लेसर और लाइनब्रेकर
CLI कमांड संपादक
CSS/JS प्रेटिफ़ाई और मिनिमाइज़
Django सीक्रेट जेनरेटर
JSON को TypeScript में परिवर्तित करें
JSON से Protobuf में रूपांतरण
JSON से SQL में डेटा आयात करें
K6 लोड टेस्टिंग स्क्रिप्ट जनरेटर
SQL को सुंदर बनाना और प्रारूपित करना
SQL पैरामीटर जनरेटर
SQL मिनिफायर
उद्धरण कनवर्टर
एएनएसआई एस्केप टेस्टर
एपीआई परीक्षण
ओपन ग्राफ़ मेटा जनरेटर
कर्ल कनवर्टर
कोड/स्क्रिप्ट हाइलाइटर
गिट एट्रिब्यूट्स जेनरेटर
गिटइग्नोर जनरेटर
जावास्क्रिप्ट अनऑबफस्केटर/अनपैकर
जावास्क्रिप्ट ऑबफस्केटर
जावास्क्रिप्ट प्रेटिफायर
डेटा जालसाज़
डेटाबेस कनेक्शन स्ट्रिंग बिल्डर
डेटाबेस टेबल जनरेटर
डेटाबेस निर्माण बिल्डर
पिकोमैच परीक्षक
पोमोडोरो टाइमर
फ़ाइल स्प्लिटर
फेविकॉन जनरेटर
मेलटो जनरेटर
स्टैकट्रेस और भी सुंदर
स्ट्रिंग एस्केपर
स्वैगर यूआई परीक्षक
हेक्स फ़ाइल कनवर्टर
परिशोधन कैलकुलेटर
HTML एंटिटी से बाहर निकलें
HTML क्लीनर
HTML मिनिफायर
HTML से XHTML
HTML से डेटा
HTTP स्थिति कोड
REM पिक्सेल कनवर्टर
SVG प्लेसहोल्डर जनरेटर
उपयोगकर्ता-एजेंट पार्सर
एचटीएमएल डब्ल्यूवाईएसआईडब्ल्यूवाईजी संपादक
एचटीएमएल प्रेटिफायर
एमआईएम प्रकार
छवि को सीएसएस में बदलें
डिवाइस की जानकारी
यूआरएल कैचर
यूआरएल क्लीनर
यूआरएल टेक्स्ट सर्च फ़्रैगमेंट मेकर
यूआरएल स्वरूपित स्ट्रिंग को एन्कोड/डिकोड करें
यूटीएम यूआरएल जनरेटर
रंग कंट्रास्ट चेकर
रंग कनवर्टर
रंग पहिया
सीएसएस एक्सपाथ कनवर्टर
सीएसएस ग्रेडिएंट जनरेटर
सीएसएस प्रेटिफायर
सीएसएस यूनिट्स कन्वर्टर
स्लगिफ़ाई स्ट्रिंग

बैश चीटशीट

बैश के सामान्य कमांड

Bash is the default shell on most Linux systems and the language of most glue scripts. This sheet covers the interactive shortcuts, the syntax you forget between scripts, and the safety flags worth putting at the top of every file.

#!/usr/bin/env bash
set -euo pipefail

⌨️ Keyboard Shortcuts

KeysDoes
Ctrl+A / Ctrl+EJump to the start / end of the line
Ctrl+B / Ctrl+FBack / forward one character
Alt+B / Alt+FBack / forward one word
Ctrl+U / Ctrl+KCut to the start / end of the line
Ctrl+WCut the word before the cursor
Alt+DCut the word after the cursor
Ctrl+YPaste back what you last cut
Ctrl+T / Alt+TSwap the last two characters / words
Alt+.Insert the last argument of the previous command
Ctrl+LClear the screen
Ctrl+RSearch the history backwards
Ctrl+GAbort the history search
Ctrl+CInterrupt the running command
Ctrl+DEnd of input — logs out of an empty prompt
Ctrl+ZSuspend the running command
Ctrl+S / Ctrl+QFreeze / resume terminal output
Alt+U / Alt+LUpper-case / lower-case to the end of the word

🕰 History

# the last few hundred commands
history

# run command number 42
!42

# run the last command again, or the last one starting with 'ssh'
!!
!ssh

# the last argument of the previous command — also Alt+.
!$

# every argument of the previous command
!*

# re-run the last command with a substitution
^old^new

# forget a command you would rather not keep
history -d 42

# do not record commands that start with a space, and drop duplicates
export HISTCONTROL=ignoreboth
export HISTSIZE=10000 HISTFILESIZE=20000

📁 Files & Directories

# list: long, human sizes, hidden files, newest last
ls -lhAtr

# tree view of a directory
tree -L 2

# copy, move, delete
cp -r src/ dest/
mv old new
rm -rf directory

# create nested directories in one go
mkdir -p project/{src,test,docs}

# symbolic and hard links
ln -s /path/to/target linkname
ln target hardlink

# where is a file, and what is it?
find . -name '*.log' -mtime -7
find . -type f -size +100M
locate nginx.conf
which python3
type -a ls
file archive.bin
stat report.pdf

# disk usage: this directory, and the filesystem
du -sh *
du -h --max-depth=1 | sort -h
df -h

# archives
tar czf backup.tar.gz directory/
tar xzf backup.tar.gz
zip -r archive.zip directory/
unzip archive.zip

🔎 Text & Search

# grep: recursive, line numbers, case-insensitive
grep -rni "pattern" .

# only the matching part, or only the file names
grep -o 'v[0-9.]*' file
grep -rl "TODO" src/

# invert, count, context
grep -v "debug" app.log
grep -c "error" app.log
grep -B2 -A2 "exception" app.log

# head, tail, follow
head -20 file
tail -f /var/log/syslog

# columns, sorting, counting
cut -d',' -f1,3 data.csv
sort -u names.txt
sort -k2 -n scores.txt
uniq -c sorted.txt
wc -l file

# the classic: what are the top ten IPs in this log?
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

# replace across many files
sed -i 's/old/new/g' *.conf

# translate or delete characters
tr 'a-z' 'A-Z' < file
tr -d '\r' < dos.txt > unix.txt

# split a stream: to a file and onward down the pipe
command | tee output.log | grep error

# build command lines from input
find . -name '*.py' | xargs wc -l
find . -name '*.tmp' -print0 | xargs -0 rm

🖧 System & Network

# who and where am I
whoami; hostname; uname -a; uptime

# processes
ps aux | grep nginx
pgrep -a node
top
htop

# memory and load
free -h
vmstat 1 5

# what is listening, and what has this file open
ss -tulpn
lsof -i :8080
lsof /var/log/app.log

# connectivity
ping -c 4 example.com
traceroute example.com
dig example.com +short
ip addr show
curl -I https://example.com

# transfer files
scp file user@host:/path/
rsync -avz --progress src/ user@host:/dest/

# remote shell, with a tunnel
ssh user@host
ssh -L 8080:localhost:80 user@host

# services and logs (systemd)
systemctl status nginx
journalctl -u nginx -f --since "1 hour ago"

📦 Variables

# assignment: no spaces around the =
name="value"

# only for this one command
DEBUG=1 ./script.sh

# export to child processes
export PATH="$HOME/bin:$PATH"

# read input from the user
read -p "Name: " name
read -rs -p "Password: " pass

# command substitution
today=$(date +%F)

# arithmetic
count=$(( count + 1 ))
let "n = 5 * 3"

# read-only and integer variables
declare -r VERSION=1.0
declare -i counter=0
VariableHolds
$0The name of the script
$1 … $9Positional arguments
$#How many arguments were passed
$@All arguments, each one quoted separately
$*All arguments as a single word
$?Exit status of the last command
$$PID of the current shell
$!PID of the last background job
$_Last argument of the previous command
$HOME $USER $PWD $OLDPWDThe usual environment
$RANDOMA random integer
$LINENOThe current line number — handy in traps

🔤 Parameter Expansion

ExpansionResult
${var:-default}default when var is unset or empty
${var:=default}The same, and assigns it
${var:?message}Abort with message when unset — great for required arguments
${var:+value}value only when var is set
${#var}The length of the value
${var:offset:length}A substring
${var#pattern}Strip the shortest match from the start
${var##pattern}Strip the longest match from the start — ${path##*/} is basename
${var%pattern}Strip the shortest match from the end — ${file%.txt} drops the extension
${var%%pattern}Strip the longest match from the end
${var/old/new}Replace the first match
${var//old/new}Replace every match
${var^^} / ${var,,}Upper-case / lower-case the whole value
path="/var/log/app.log"
echo "${path##*/}"    # app.log
echo "${path%/*}"     # /var/log
echo "${path%.log}"   # /var/log/app

📚 Arrays

# indexed arrays
fruits=(apple banana cherry)
fruits[3]="date"

echo "${fruits[1]}"       # banana
echo "${fruits[@]}"       # every element
echo "${#fruits[@]}"      # how many elements
echo "${!fruits[@]}"      # the indexes
echo "${fruits[@]:1:2}"   # a slice

for fruit in "${fruits[@]}"; do
  echo "$fruit"
done

# associative arrays (bash 4+)
declare -A color
color[apple]="red"
color[banana]="yellow"

echo "${color[apple]}"
for key in "${!color[@]}"; do
  echo "$key is ${color[$key]}"
done

🧪 Tests & Conditions

Use [[ ... ]] in bash — it handles empty variables and patterns far better than the old [ ... ].

FilesTrue when
-e fileIt exists
-f fileIt exists and is a regular file
-d fileIt exists and is a directory
-L fileIt is a symbolic link
-s fileIt exists and is not empty
-r -w -xYou can read / write / execute it
-O fileYou own it
f1 -nt f2f1 is newer than f2 (-ot for older)
StringsTrue when
-z "$s"The string is empty
-n "$s"The string is not empty
"$a" == "$b"They are equal (= also works)
"$a" != "$b"They differ
"$a" < "$b"Sorts before, in the current locale
"$s" == pre*Glob match — unquoted right-hand side
"$s" =~ ^re$Regex match, captures land in $BASH_REMATCH
NumbersMeaning
-eqEqual
-neNot equal
-ltLess than
-leLess than or equal
-gtGreater than
-geGreater than or equal
if [[ -f "$config" && -r "$config" ]]; then
  echo "readable"
elif [[ -d "$config" ]]; then
  echo "that is a directory"
else
  echo "missing"
fi

# arithmetic comparison reads more naturally in (( ))
if (( count > 10 )); then echo "plenty"; fi

🔀 Flow Control

# for over a list, a glob, or a range
for name in alice bob; do echo "$name"; done
for f in *.log; do gzip "$f"; done
for i in {1..10}; do echo "$i"; done
for (( i = 0; i < 10; i++ )); do echo "$i"; done

# while and until
while read -r line; do echo "$line"; done < input.txt
until ping -c1 host &>/dev/null; do sleep 5; done

# case
case "$1" in
  start)   echo "starting" ;;
  stop)    echo "stopping" ;;
  restart) echo "restarting" ;;
  *)       echo "usage: $0 {start|stop|restart}"; exit 1 ;;
esac

# select builds a numbered menu
select choice in build test deploy; do
  echo "you picked $choice"
  break
done

# loop control
continue   # skip to the next iteration
break      # leave the loop

🧰 Functions

greet() {
  local name="${1:?name required}"
  local greeting="${2:-Hello}"
  echo "$greeting, $name!"
  return 0
}

greet "World"
greet "World" "Good morning"

# capture the output, and check the status
message=$(greet "World")
if ! greet; then echo "greet failed"; fi

# make a function available to subshells
export -f greet

➡️ Redirection

SyntaxDoes
> fileSend stdout to a file, replacing it
>> fileAppend stdout to a file
2> fileSend stderr to a file
2>&1Send stderr wherever stdout is going
&> fileSend both to a file (bash)
> file 2>&1The portable form of the same
< fileRead stdin from a file
<<EOF … EOFHere-document
<<-EOF … EOFHere-document, leading tabs stripped
<<< "string"Here-string
|Pipe stdout into the next command
|&Pipe stdout and stderr
> /dev/null 2>&1Discard everything
<(command)Process substitution — a command as a file
tee fileWrite to a file and pass the stream on
# a heredoc, expanded
cat <<EOF > config.ini
host=$HOSTNAME
port=8080
EOF

# a heredoc, literal (quoted delimiter)
cat <<'EOF' > script.sh
echo "$HOME is not expanded here"
EOF

# compare the output of two commands without temporary files
diff <(sort a.txt) <(sort b.txt)

⚙️ Jobs & Processes

# run in the background, and list the jobs
long_task &
jobs

# bring back to the foreground, or resume in the background
fg %1
bg %1

# Ctrl+Z suspends the foreground job

# survive logout
nohup ./script.sh > out.log 2>&1 &
disown -h %1

# wait for background jobs
wait
wait $!

# signals
kill 1234
kill -9 1234
kill -TERM %1
pkill -f "node server.js"

# give a command a deadline
timeout 30s ./slow_task.sh

# clean up on exit, whatever happens
trap 'rm -f "$tmpfile"' EXIT
trap 'echo interrupted; exit 130' INT TERM

🛡 Safe Scripting

#!/usr/bin/env bash
# -e  exit on any failing command
# -u  treat unset variables as an error
# -o pipefail  a pipeline fails if any stage fails
set -euo pipefail

# make word splitting predictable
IFS=$'\n\t'

# always quote expansions
cp "$src" "$dest"

# check the syntax without running anything
bash -n script.sh

# trace every command as it runs
bash -x script.sh
set -x; risky_command; set +x

# a more informative trace prefix
export PS4='+ ${BASH_SOURCE}:${LINENO}: '

# report where a script died
trap 'echo "failed at line $LINENO with status $?" >&2' ERR

# and lint it before it reaches anyone else
shellcheck script.sh

⚠️ set -e has surprising corners: it does not fire inside if, &&, || or command substitutions used in assignments. It is a seatbelt, not autopilot — still check what matters explicitly.

🎨 Colours

Escape sequences take the form \033[<style>;<colour>m, and \033[0m resets. \e and \x1B are the same character as \033.

ColourForegroundBrightBackground
Black309040
Red319141
Green329242
Yellow339343
Blue349444
Magenta359545
Cyan369646
White379747
StyleCodeStyleCode
Reset0Underline4
Bold1Blink5
Dim2Reverse7
RED='\033[0;31m'
GREEN='\033[0;32m'
BOLD='\033[1m'
RESET='\033[0m'

echo -e "${GREEN}ok${RESET} — ${RED}${BOLD}failed${RESET}"

# only colourise when stdout is a terminal
if [[ -t 1 ]]; then RED='\033[0;31m'; RESET='\033[0m'; else RED=''; RESET=''; fi

💡 Tips

# aliases and functions belong in ~/.bashrc
alias ll='ls -lhA'
alias gs='git status -sb'
mkcd() { mkdir -p "$1" && cd "$1"; }

# reload the config after editing it
source ~/.bashrc

# brace expansion saves a lot of typing
cp config.yaml{,.bak}
mkdir -p src/{components,utils,tests}

# repeat the previous command as root
sudo !!

# go back to the previous directory
cd -

# run something regardless of the current directory
(cd /tmp && ./task.sh)

# time a command, and keep a transcript of a session
time ./build.sh
script session.log

📚 Resources

  • GNU Bash manual
  • ShellCheck — lints your scripts
  • Bash Pitfalls
  • Google Shell Style Guide
  • explainshell — break down any command line