├── .github ├── asset │ └── asset-ad-001.png ├── pull_request_template.md └── workflows │ ├── testing_shell.yml │ └── update_directory.yml ├── CONTRIBUTING.md ├── DIRECTORY.md ├── LICENSE ├── README.md ├── advance ├── 00_regex │ ├── README.md │ ├── buah.txt │ └── regex.sh ├── 01_advance_file │ ├── README.md │ └── advance_file.sh ├── 03_user_administration │ ├── README.md │ └── user_administration.sh ├── 04_system_logging │ ├── README.md │ └── system_logging.sh └── README.md ├── basic ├── 00_hello_world │ ├── README.md │ └── hello_world.sh ├── 01_variabel │ ├── README.md │ └── variabel.sh ├── 02_variabel_spesial │ ├── README.md │ └── variabel_spesial.sh ├── 03_operator │ ├── README.md │ └── aritmatika.sh ├── 04_perform_arimathic_operations │ ├── README.md │ ├── pao1.sh │ └── pao2-expr.sh ├── 05_bc_command │ ├── README.md │ ├── bc1.sh │ └── bc2.sh ├── 06_instruksi_logika │ ├── README.md │ ├── logika1.sh │ └── logika_else.sh ├── 07_user_input │ ├── README.md │ ├── user-input1.sh │ ├── user-input2.sh │ └── user-input3.sh ├── 08_array │ ├── README.md │ ├── array1.sh │ ├── array2.sh │ ├── array3.sh │ └── array4.sh ├── 09_loops │ ├── README.md │ ├── for-loop.sh │ ├── until-loop.sh │ └── while-loop.sh ├── 10_break_and_continue │ ├── README.md │ ├── break.sh │ └── continue.sh ├── 11_functions │ ├── README.md │ ├── function-pass-parameter.sh │ ├── function-recursive.sh │ ├── function-return.sh │ ├── function1.sh │ ├── function2.sh │ ├── function3.sh │ └── local_variabel.sh ├── 12_environment_variables │ ├── README.md │ └── environment_variables.sh ├── 13_operation_file_dan_folder │ ├── README.md │ ├── operation_file.sh │ └── operation_folder.sh ├── 14_permission_file │ ├── README.md │ ├── permission.sh │ └── test-permission.txt ├── 15_shebang │ ├── README.md │ ├── test-shebang-bash.sh │ └── test-shebang-dash.sh └── README.md ├── playground └── rata_rata.sh ├── simple_project ├── banned-ip-with-csf.sh ├── cpu_temp.sh ├── cuaca.sh ├── factorial.sh ├── fizzbuzz.sh ├── get_ip.sh ├── kalkulator.sh ├── pattern_berlian.sh ├── pattern_segitiga.sh ├── prime_checking.sh ├── sorting │ └── bubble_sorting.sh ├── spinner.sh └── warna.sh ├── src └── Screenshot.png └── usefull_command ├── 00_read_file ├── README.md ├── cat.sh ├── head.sh ├── test.txt └── testing.txt ├── 01_manipulation_read_file ├── README.md ├── flag.txt └── manipulation.sh ├── 02_sed_and_awk ├── README.md ├── belajar_sed ├── learning-awk.awk └── sed.sh ├── 03_search_file ├── BELAJAR_SHELL_SCRIPTING.txt ├── README.md ├── search_file.sh └── tes │ └── belajar_shell_scripting.txt ├── 04_find_advance ├── README.md ├── find_advance.sh ├── flag.txt └── sample.txt ├── 05_look_services ├── README.md └── look_services.sh └── README.md /.github/asset/asset-ad-001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bellshade/Shell/e168f6cc665ef924bab8ad6d2b976e53a09d3c01/.github/asset/asset-ad-001.png -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Deskripsi (Description) 2 | 3 | 4 | 5 | # Checklist: 6 | ##### Umum: 7 | - [ ] Saya menambah kode terbaru. 8 | - [ ] Saya memperbaiki kode yang sudah ada. 9 | - [ ] Saya memperbaiki dokumentasi. 10 | - [ ] Saya menambah dokumentasi. 11 | 12 | ##### Contributor Requirements (Syarat Kontributor) dan Lain-Lain: 13 | - [ ] Saya sudah membaca (I have read) [CONTRIBUTING](https://github.com/bellshade/Shell/blob/main/CONTRIBUTING.md) dan sudah menyetujui semua syarat. 14 | - [ ] Saya menggunakan bahasa Indonesia untuk memberikan penjelasan dari kode yang saya buat. 15 | 16 | # Environment 17 | Saya menggunakan (I'm using): 18 | 19 | - ``os`` = ``linux / windows / macOS`` 20 | 21 | 22 | 23 | 24 | linked issue #NOMOR_ISSUE -------------------------------------------------------------------------------- /.github/workflows/testing_shell.yml: -------------------------------------------------------------------------------- 1 | name: github action shell 2 | on: [pull_request, push] 3 | jobs: 4 | test-shell-scripting: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: cek kode repositori 8 | uses: actions/checkout@v2 9 | 10 | - run: echo "selamat datang di bellshade shell scripting" 11 | 12 | - run: echo "jalan pada ${{ runner.os }}" 13 | - name: list dari direktori shell scripting 14 | run: | 15 | d=$(date "+%Y-%m-%d") 16 | file="/tmp/test.txt.$$" && touch --date "$d" "$file" 17 | echo $file && find . -type d \( -path ./playground -o -path ./simple_project -o -path ./basic -o -path ./advance/03_user_administration -o -path ./advance/01_advance_file -o -path ./usefull_command \) -prune -o -iname "*.sh" -type f -newer $file > output.txt 18 | for i in $(cat output.txt); do if [ -d "$i" ]; then echo "$i adalah folder."; elif [ -f "$i" ]; then chmod +x "$i" && bash "$i"; else echo "$i tidak ditemukan atau bukan file/folder."; fi; done 19 | 20 | - run: echo "status ${{ job.status }}" 21 | -------------------------------------------------------------------------------- /.github/workflows/update_directory.yml: -------------------------------------------------------------------------------- 1 | name: Update Directory 2 | on: [push] 3 | jobs: 4 | update_directory_md: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@master 8 | - uses: actions/setup-python@master 9 | - name: Update Directory 10 | shell: python 11 | run: | 12 | import os 13 | from typing import Iterator 14 | URL_BASE = "https://github.com/bellshade/shell/tree/main" 15 | g_output = [] 16 | def good_filepaths(top_dir: str = ".") -> Iterator[str]: 17 | for dirpath, dirnames, filenames in os.walk(top_dir): 18 | dirnames[:] = [d for d in dirnames if d[0] not in "._"] 19 | for filename in filenames: 20 | if os.path.splitext(filename)[1].lower() == ".sh": 21 | yield os.path.join(dirpath, filename).lstrip("./") 22 | def md_prefix(i): 23 | return f"{i * ' '}*" if i else "\n##" 24 | def print_path(old_path: str, new_path: str) -> str: 25 | global g_output 26 | old_parts = old_path.split(os.sep) 27 | for i, new_part in enumerate(new_path.split(os.sep)): 28 | if i + 1 > len(old_parts) or old_parts[i] != new_part: 29 | if new_part: 30 | g_output.append(f"{md_prefix(i)} {new_part.replace('_', ' ')}") 31 | return new_path 32 | def build_directory_md(top_dir: str = ".") -> str: 33 | global g_output 34 | old_path = "" 35 | for filepath in sorted(good_filepaths(), key=str.lower): 36 | filepath, filename = os.path.split(filepath) 37 | if filepath != old_path: 38 | old_path = print_path(old_path, filepath) 39 | indent = (filepath.count(os.sep) + 1) if filepath else 0 40 | url = "/".join((URL_BASE, filepath, filename)).replace(" ", "%20") 41 | filename = os.path.splitext(filename.replace("_", " "))[0] 42 | g_output.append(f"{md_prefix(indent)} [{filename}]({url})") 43 | return "\n".join(g_output) 44 | with open("DIRECTORY.md", "w") as out_file: 45 | out_file.write(build_directory_md(".") + "\n") 46 | - name: Update DIRECTORY.md 47 | run: | 48 | cat DIRECTORY.md 49 | git config --global user.name bellshadebot 50 | git config --global user.email 'bellshade07@gmail.com' 51 | git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY 52 | git add DIRECTORY.md 53 | arr[0]="feat: update file direktori" 54 | arr[1]="feat: menambah list direktori" 55 | arr[2]="feat: update perubahan file DIRECTORY.md" 56 | rand=$[$RANDOM % ${#arr[@]}] 57 | git commit -s -m "${arr[$rand]}" || true 58 | git push --force origin HEAD:$GITHUB_REF || true 59 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # contributing 2 | 3 | ***Contributor*** 4 | 5 | Kami sangat senang anda telah ikut berkontribusi dalam implementasi algortima, struktur data, atau memperbaiki *error*. 6 | Semua boleh ikut berkontribusi sekecil apapun dengan pengecualian sebagai berikut: 7 | 8 | - Hasil pekerjaan kamu adalah buatan kamu sendiri dan tidak ada hak cipta dari orang lain. Jika kami menemukan kesamaan, maka tidak kami *merge*. 9 | - Hasil kerja kamu akan berlisensi [MIT](LICENSE) ketika *pull request* kamu sudah di-*merge*. 10 | - Hasil kerja kamu wajib mengikuti standar dan *style* koding dari kami. 11 | - Hanya menerima *file* dengan ekstensi ``*.sh``, selain itu dibuat pengecualian dengan menjelaskan secara detail. 12 | 13 | 14 | ## pull request 15 | 16 | gunakan [issue](https://github.com/bellshade/Shell/issues/new) apabila ingin menambahkan kode atau implementasi lainnya, agar tidak ada konflik dengan pull request lainnya 17 | 18 | - laukan penjelasan deskripsi perubahan yang anda lakukan pada repositori kami dengan membuat penjelasan pada issue 19 | 20 | - setelah menjelaskan perubahan anda di [issue]() kemudian lakukan fork pada repositori kami. 21 | 22 | - setelah melakukan _fork_, dan _clone_ anda dibebaskan untuk mengbuah atau menambah. 23 | - clone dan kemudian buat branch baru 24 | ``` 25 | git clone https://github.com/bellshade/shell 26 | cd shell 27 | git checkout -b 28 | ``` 29 | 30 | - running terlebih dahulu pada perangkat anda sebelum melakukan commit 31 | 32 | - setelah merubah rubah atau menambahkan kode. lakukan commit dengan message awal yang sudah ditentukan. 33 | - contoh penggunaan message commit yang benar 34 | ```bash 35 | git commit -m "feat: menambahkan kode terbaru" 36 | ``` 37 | 38 | - lakukan push ke branch ke repositori kamu 39 | ```bash 40 | git add . 41 | git commit -m "feat: menambahkan kode terbaru" 42 | git push origin 43 | ``` 44 | 45 | 46 | **pesan commit** 47 | 48 | - ``feat:`` untuk menambahkan kode atau tambahan lainnya 49 | - ``fix:`` untuk mengubah kode yang sudah ada atau memperbaiki 50 | - ``docs:`` untuk mengubah atau membuat dokumentasai 51 | - ``add:`` untuk menambah kode atau tambahan lainnya (opsional) 52 | 53 | ## informasi 54 | 55 | pull request akan di-_merge_ jika 56 | - mengikuti standar dan arahan dari ``CONTRIBUTING.md``; 57 | - lulus test dari beberapa testing yang sudah kami siapkan 58 | 59 | **lainnya** 60 | 61 | - jika ada knedala atau masalah dalam _pull request_, kamu bisa laporkan masalahnya dalam issue 62 | 63 | - jika ada test yang tidak lewat atau gagal, kami akan cek kembali perubahan anda 64 | 65 | Untuk pull request, disarankan untuk menjelaskan secara detail yang kamu ubah atau tambahkan, dan bersikap sopan serta selalu berterima kasih. Itu salah satu bentuk tata krama yang baik terhadap sesama contributor dan programmer lainnya. -------------------------------------------------------------------------------- /DIRECTORY.md: -------------------------------------------------------------------------------- 1 | 2 | ## advance 3 | * 00 regex 4 | * [regex](https://github.com/bellshade/shell/tree/main/advance/00_regex/regex.sh) 5 | * 01 advance file 6 | * [advance file](https://github.com/bellshade/shell/tree/main/advance/01_advance_file/advance_file.sh) 7 | * 03 user administration 8 | * [user administration](https://github.com/bellshade/shell/tree/main/advance/03_user_administration/user_administration.sh) 9 | * 04 system logging 10 | * [system logging](https://github.com/bellshade/shell/tree/main/advance/04_system_logging/system_logging.sh) 11 | 12 | ## basic 13 | * 00 hello world 14 | * [hello world](https://github.com/bellshade/shell/tree/main/basic/00_hello_world/hello_world.sh) 15 | * 01 variabel 16 | * [variabel](https://github.com/bellshade/shell/tree/main/basic/01_variabel/variabel.sh) 17 | * 02 variabel spesial 18 | * [variabel spesial](https://github.com/bellshade/shell/tree/main/basic/02_variabel_spesial/variabel_spesial.sh) 19 | * 03 operator 20 | * [aritmatika](https://github.com/bellshade/shell/tree/main/basic/03_operator/aritmatika.sh) 21 | * 04 perform arimathic operations 22 | * [pao1](https://github.com/bellshade/shell/tree/main/basic/04_perform_arimathic_operations/pao1.sh) 23 | * [pao2-expr](https://github.com/bellshade/shell/tree/main/basic/04_perform_arimathic_operations/pao2-expr.sh) 24 | * 05 bc command 25 | * [bc1](https://github.com/bellshade/shell/tree/main/basic/05_bc_command/bc1.sh) 26 | * [bc2](https://github.com/bellshade/shell/tree/main/basic/05_bc_command/bc2.sh) 27 | * 06 instruksi logika 28 | * [logika1](https://github.com/bellshade/shell/tree/main/basic/06_instruksi_logika/logika1.sh) 29 | * [logika else](https://github.com/bellshade/shell/tree/main/basic/06_instruksi_logika/logika_else.sh) 30 | * 07 user input 31 | * [user-input1](https://github.com/bellshade/shell/tree/main/basic/07_user_input/user-input1.sh) 32 | * [user-input2](https://github.com/bellshade/shell/tree/main/basic/07_user_input/user-input2.sh) 33 | * [user-input3](https://github.com/bellshade/shell/tree/main/basic/07_user_input/user-input3.sh) 34 | * 08 array 35 | * [array1](https://github.com/bellshade/shell/tree/main/basic/08_array/array1.sh) 36 | * [array2](https://github.com/bellshade/shell/tree/main/basic/08_array/array2.sh) 37 | * [array3](https://github.com/bellshade/shell/tree/main/basic/08_array/array3.sh) 38 | * [array4](https://github.com/bellshade/shell/tree/main/basic/08_array/array4.sh) 39 | * 09 loops 40 | * [for-loop](https://github.com/bellshade/shell/tree/main/basic/09_loops/for-loop.sh) 41 | * [until-loop](https://github.com/bellshade/shell/tree/main/basic/09_loops/until-loop.sh) 42 | * [while-loop](https://github.com/bellshade/shell/tree/main/basic/09_loops/while-loop.sh) 43 | * 10 break and continue 44 | * [break](https://github.com/bellshade/shell/tree/main/basic/10_break_and_continue/break.sh) 45 | * [continue](https://github.com/bellshade/shell/tree/main/basic/10_break_and_continue/continue.sh) 46 | * 11 functions 47 | * [function-pass-parameter](https://github.com/bellshade/shell/tree/main/basic/11_functions/function-pass-parameter.sh) 48 | * [function-recursive](https://github.com/bellshade/shell/tree/main/basic/11_functions/function-recursive.sh) 49 | * [function-return](https://github.com/bellshade/shell/tree/main/basic/11_functions/function-return.sh) 50 | * [function1](https://github.com/bellshade/shell/tree/main/basic/11_functions/function1.sh) 51 | * [function2](https://github.com/bellshade/shell/tree/main/basic/11_functions/function2.sh) 52 | * [function3](https://github.com/bellshade/shell/tree/main/basic/11_functions/function3.sh) 53 | * [local variabel](https://github.com/bellshade/shell/tree/main/basic/11_functions/local_variabel.sh) 54 | * 12 environment variables 55 | * [environment variables](https://github.com/bellshade/shell/tree/main/basic/12_environment_variables/environment_variables.sh) 56 | * 13 operation file dan folder 57 | * [operation file](https://github.com/bellshade/shell/tree/main/basic/13_operation_file_dan_folder/operation_file.sh) 58 | * [operation folder](https://github.com/bellshade/shell/tree/main/basic/13_operation_file_dan_folder/operation_folder.sh) 59 | * 14 permission file 60 | * [permission](https://github.com/bellshade/shell/tree/main/basic/14_permission_file/permission.sh) 61 | * 15 shebang 62 | * [test-shebang-bash](https://github.com/bellshade/shell/tree/main/basic/15_shebang/test-shebang-bash.sh) 63 | * [test-shebang-dash](https://github.com/bellshade/shell/tree/main/basic/15_shebang/test-shebang-dash.sh) 64 | 65 | ## playground 66 | * [rata rata](https://github.com/bellshade/shell/tree/main/playground/rata_rata.sh) 67 | 68 | ## simple project 69 | * [banned-ip-with-csf](https://github.com/bellshade/shell/tree/main/simple_project/banned-ip-with-csf.sh) 70 | * [cpu temp](https://github.com/bellshade/shell/tree/main/simple_project/cpu_temp.sh) 71 | * [cuaca](https://github.com/bellshade/shell/tree/main/simple_project/cuaca.sh) 72 | * [factorial](https://github.com/bellshade/shell/tree/main/simple_project/factorial.sh) 73 | * [fizzbuzz](https://github.com/bellshade/shell/tree/main/simple_project/fizzbuzz.sh) 74 | * [get ip](https://github.com/bellshade/shell/tree/main/simple_project/get_ip.sh) 75 | * [kalkulator](https://github.com/bellshade/shell/tree/main/simple_project/kalkulator.sh) 76 | * [pattern berlian](https://github.com/bellshade/shell/tree/main/simple_project/pattern_berlian.sh) 77 | * [pattern segitiga](https://github.com/bellshade/shell/tree/main/simple_project/pattern_segitiga.sh) 78 | * [prime checking](https://github.com/bellshade/shell/tree/main/simple_project/prime_checking.sh) 79 | * sorting 80 | * [bubble sorting](https://github.com/bellshade/shell/tree/main/simple_project/sorting/bubble_sorting.sh) 81 | * [spinner](https://github.com/bellshade/shell/tree/main/simple_project/spinner.sh) 82 | * [warna](https://github.com/bellshade/shell/tree/main/simple_project/warna.sh) 83 | 84 | ## usefull command 85 | * 00 read file 86 | * [cat](https://github.com/bellshade/shell/tree/main/usefull_command/00_read_file/cat.sh) 87 | * [head](https://github.com/bellshade/shell/tree/main/usefull_command/00_read_file/head.sh) 88 | * 01 manipulation read file 89 | * [manipulation](https://github.com/bellshade/shell/tree/main/usefull_command/01_manipulation_read_file/manipulation.sh) 90 | * 02 sed and awk 91 | * [sed](https://github.com/bellshade/shell/tree/main/usefull_command/02_sed_and_awk/sed.sh) 92 | * 03 search file 93 | * [search file](https://github.com/bellshade/shell/tree/main/usefull_command/03_search_file/search_file.sh) 94 | * 04 find advance 95 | * [find advance](https://github.com/bellshade/shell/tree/main/usefull_command/04_find_advance/find_advance.sh) 96 | * 05 look services 97 | * [look services](https://github.com/bellshade/shell/tree/main/usefull_command/05_look_services/look_services.sh) 98 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Bellshade 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [![Contributors][contributors-shield]][contributors-url] 4 | [![Forks][forks-shield]][forks-url] 5 | [![Stargazers][stars-shield]][stars-url] 6 | [![Issues][issues-shield]][issues-url] 7 | [![MIT License][license-shield]][license-url] 8 | [![Discord][discord-shield]][discord-url] 9 | 10 | 11 | 12 |
13 |
14 | 15 | Logo 16 | 17 | 18 |

Bellshade Shell

19 | 20 |

21 | Part of Bellshade Project, managed by WPU Discord Community 22 |
23 |
Explore the docs » 24 |
25 | Report Bug 26 | · 27 | Request Feature 28 |

29 |
30 | 31 |
32 | Table of Contents 33 |
    34 |
  1. 35 | About The Project 36 |
  2. 37 |
  3. 38 | Getting Started 39 | 43 |
  4. 44 |
  5. Usage
  6. 45 | 50 |
  7. Roadmap
  8. 51 |
  9. Contributing
  10. 52 |
  11. License
  12. 53 |
  13. Contact
  14. 54 |
  15. Acknowledgments
  16. 55 |
56 |
57 | 58 | ## Tentang Project 59 | 60 | [![Product Name Screen Shot][product-screenshot]](https://en.wikipedia.org/wiki/Shell_(computing)) 61 | 62 | Shell adalah program antarmuka yang digunakan untuk berinteraksi dengan sistem operasi pada komputer. Fungsinya mirip dengan asisten yang membantu berbicara dengan komputer melalui perintah-perintah tertentu. Ketika memberikan perintah melalui Shell, Shell akan menerjemahkan perintah tersebut ke dalam bahasa yang dapat dimengerti oleh sistem operasi. Setelah itu, sistem operasi akan melakukan tindakan sesuai dengan perintah yang diberikan. Shell memudahkan dalam menjalankan program, mengelola file, mengatur pengaturan sistem, dan melakukan berbagai tugas lainnya pada komputer. Dengan Shell, pekerjaan dengan komputer bisa secara lebih efisien dan efektif. 63 | 64 | Shell secara default dan otomatis terdapat pada sistem operasi unix dan linux (untuk pengguna Windows menggunakan WSL atau dengan singkatan [(Windows Subsystem for Linux)](https://docs.microsoft.com/en-us/windows/wsl/) 65 | 66 |

(back to top)

67 | 68 | ## Getting Started 69 | 70 | Repositori ini bersiki kumpulan berbagai macam materi pembelajaran dari Shell Scripting. 71 | 72 | ### Prerequisites 73 | 74 | _berikut beberapa list untuk belajar shell_ 75 | 76 | * Komputer ([Powershell](https://aka.ms/PSWindows)/[Linux](https://en.wikipedia.org/wiki/Bash_(Unix_shell))) 77 | 78 | _Jika tidak ada komputer maka bisa menggunakan smartphone_ 79 | 80 | * Termux ([Klik Disini Untuk Download](https://f-droid.org/repo/com.termux_118.apk)) 81 | 82 | ### Installation 83 | 84 | _Untuk Instalasi bisa menggunakan beberapa metode berikut_ 85 | 86 | * Clone Repository 87 | ```sh 88 | git clone https://github.com/bellshade/Shell 89 | ``` 90 | * Atau Langsung Membaca [List Of Directory](#List-Of-Directory) 91 | 92 |

(back to top)

93 | 94 | ## Usage 95 | 96 | Selamat datang di Bellshade Shell! Materi ini akan membantu kamu memulai dengan menggunakan Shell, antarmuka baris perintah yang andal untuk berinteraksi dengan sistem operasi. Ikuti langkah-langkah ini untuk memulai perjalanan kamu ke dunia shell: 97 | 98 | ### Buka Terminal 99 | Untuk menggunakan Shell, kamu perlu membuka terminal di komputer kamu. Terminal adalah antarmuka berbasis teks yang memungkinkan kamu mengetik perintah dan menerima keluaran dari sistem. Cari aplikasi terminal di menu komputer kamu atau cari "Terminal" di bilah pencarian. Setelah kamu membuka terminal, kamu siap untuk mulai menggunakan Shell. 100 | 101 | ### Mengetik Perintah Shell 102 | Di terminal, Anda dapat mengetikkan perintah Shell. Perintah Shell adalah instruksi berbasis teks yang memberi tahu komputer apa yang harus dilakukan. Misalnya, kamu dapat menggunakan perintah `ls` untuk membuat daftar file dan direktori di folder saat ini atau menggunakan perintah `mkdir` untuk membuat direktori baru. 103 | 104 | ### Menjalankan Script Shell 105 | Salah satu fitur hebat dari Shell adalah kemampuan untuk menulis dan menjalankan Script Shell. Script Shell adalah file yang berisi serangkaian perintah Shell yang dapat dijalankan bersama. kamu dapat membuat file baru dengan ekstensi `.sh` (mis., `myscript.sh`) dan menulis perintah kamu di dalamnya. Untuk menjalankan skrip, gunakan perintah `bash` atau `./`, diikuti dengan nama skrip. Misalnya: `bash myscript.sh` atau `./myscript.sh`. 106 | 107 | Sekarang kamu siap untuk belajar Shell! Ikuti pelajaran dalam materi ini untuk menjelajahi berbagai pelajaran dan menjadi mahir dalam menggunakan Shell untuk tugas sehari-hari dan kebutuhan kamu. Selamat belajar! 108 | 109 |

(back to top)

110 | 111 | ## Roadmap 112 | 113 | Lihat [open issues](https://github.com/bellshade/Shell/issues) untuk daftar lengkap fitur yang diusulkan (dan berbagai Issues). 114 | 115 |

(back to top)

116 | 117 | ## License 118 | 119 | Distributed under the MIT License. See `LICENSE.txt` for more information. 120 | 121 |

(back to top)

122 | 123 | 124 | ## List Of Directory 125 |
126 | Directory Files 127 |
    128 |
  1. 129 | 📁 Basic 130 | 180 |
  2. 181 |
  3. 182 | 📁 playground 183 |
  4. 184 |
  5. 185 | 📁 Simple Project 186 |
  6. 187 |
  7. 188 | 📁 Useful Command 189 | 209 |
  8. 210 |
211 |
212 | 213 |

(back to top)

214 | 215 | [contributors-shield]: https://img.shields.io/github/contributors/bellshade/Shell.svg?style=for-the-badge 216 | [contributors-url]: https://github.com/bellshade/Shell/graphs/contributors 217 | [forks-shield]: https://img.shields.io/github/forks/bellshade/Shell.svg?style=for-the-badge 218 | [forks-url]: https://github.com/bellshade/Shell/network/members 219 | [stars-shield]: https://img.shields.io/github/stars/bellshade/Shell.svg?style=for-the-badge 220 | [stars-url]: https://github.com/bellshade/Shell/stargazers 221 | [issues-shield]: https://img.shields.io/github/issues/bellshade/Shell.svg?style=for-the-badge 222 | [issues-url]: https://github.com/bellshade/Shell/issues 223 | [license-shield]: https://img.shields.io/github/license/bellshade/Shell.svg?style=for-the-badge 224 | [license-url]: https://github.com/bellshade/Shell/blob/master/LICENSE.txt 225 | [discord-shield]: https://img.shields.io/discord/722002048643497994?logo=discord&logoColor=white&style=for-the-badge 226 | [discord-url]: http://discord.gg/S4rrXQU 227 | [product-screenshot]: https://i.ibb.co/q10KW18/Screenshot.png -------------------------------------------------------------------------------- /advance/00_regex/README.md: -------------------------------------------------------------------------------- 1 | 2 | # **Regular Expression (Regex)** 3 | 4 | **Regex** adalah singkatan dari _Regular Expression_, yaitu serangkaian karakter yang mendefinisikan **pola** pencarian untuk melakukan proses _**matching**_, _**locating**_, dan _**text manipulation**_. 5 | 6 | Dengan Regex, kita dapat melakukan pencarian yang lebih kompleks dan fleksibel dibandingkan dengan pencarian teks biasa. 7 | 8 | --- 9 | 10 | ## **Perintah Terkait Regex: `GREP`, `AWK`, `SED`** 11 | 12 | ### 1. **Grep** 13 | `grep` digunakan untuk mencari _string_ di dalam sebuah _line_ teks, baik itu di dalam satu file atau dalam beberapa file di sebuah folder. `grep` sangat efektif untuk menemukan pola sederhana dalam teks. 14 | 15 | **Contoh:** 16 | ```bash 17 | grep "pattern" file.txt 18 | ``` 19 | 20 | ### 2. **Awk** 21 | `awk` adalah alat yang lebih canggih dibandingkan `grep`. Selain melakukan pencarian teks seperti `grep`, `awk` juga bisa memproses dan memanipulasi data kolom seperti pada file CSV atau tabel teks lainnya. Dengan kata lain, `awk` adalah `grep` yang ditingkatkan dengan kemampuan pemrosesan data berbasis kolom. 22 | 23 | **Contoh:** 24 | ```bash 25 | awk '$1 ~ /pattern/ {print $0}' file.csv 26 | ``` 27 | 28 | ### 3. **Sed** 29 | `sed` adalah alat yang digunakan untuk memodifikasi teks berdasarkan pola tertentu. Ini sering digunakan untuk melakukan penggantian teks (_substitution_) dan manipulasi sederhana berdasarkan _Regular Expression_. Namun, `sed` lebih jarang digunakan dibandingkan `grep` atau `awk` dalam skenario sehari-hari. 30 | 31 | **Contoh:** 32 | ```bash 33 | sed 's/pattern/replacement/' file.txt 34 | ``` 35 | 36 | --- 37 | 38 | ## **Contoh Penggunaan `awk` dengan Regex** 39 | 40 | Berikut adalah contoh penggunaan `awk` untuk mencocokkan dan mencetak baris berdasarkan kolom pertama yang memenuhi pola regex. 41 | 42 | ```bash 43 | awk '$1 ~ /p[o]/ {print $0}' "fileanda.txt" 44 | ``` 45 | 46 | ### **Penjelasan:** 47 | 48 | - **`$1`** : Mengacu pada kolom pertama dari setiap baris. 49 | - **`~`** : Operator pencocokan regex. 50 | - **`/p[o]/`** : Pola yang mencocokkan string yang berisi huruf 'p' diikuti oleh huruf 'o'. 51 | - **`{print $0}`** : Mencetak seluruh baris jika kolom pertama sesuai dengan pola regex. 52 | 53 | Jadi, perintah di atas akan mencetak semua baris dari `fileanda.txt` di mana kolom pertamanya mengandung string 'po'. 54 | 55 | --- 56 | 57 | Dengan memahami penggunaan dasar dari `grep`, `awk`, dan `sed`, serta cara menggunakan regex, kamu bisa melakukan pencarian dan manipulasi teks yang lebih efisien dan fleksibel! 58 | -------------------------------------------------------------------------------- /advance/00_regex/buah.txt: -------------------------------------------------------------------------------- 1 | apple red 4 2 | banana yellow 6 3 | strawberry red 3 4 | raspberry red 99 5 | grape purple 10 6 | apple green 8 7 | plum purple 2 8 | kiwi brown 4 9 | potato brown 9 10 | pineapple yellow 5 -------------------------------------------------------------------------------- /advance/00_regex/regex.sh: -------------------------------------------------------------------------------- 1 | awk -e '$1 ~ /p[o]/ {print $0}' ./advance/00_regex/buah.txt -------------------------------------------------------------------------------- /advance/01_advance_file/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | ![bn](https://user-images.githubusercontent.com/73097560/115834477-dbab4500-a447-11eb-908a-139a6edaec5c.gif) 7 | 8 | # Advance File 9 | Yoo, materi kali ini sebenarnya lanjutan dari materi basic [operation file dan folder](../../basic/13_operation_file_dan_folder/). Didalam materi ini akan dijelaskan beberapa hal yang kerap kali berguna dalam management sebuah file 10 | 11 | # Change Owner 12 | Merupakan command yang digunakan untuk mengubah status kepemilikan dari file / folder. Ini sering digunakan untuk mengubah file tersebut punya siapa. Sebagai contoh disini kita punya 1 folder dan 1 file yang udah di save di `/opt`. 13 | 14 | ```bash 15 | root@alpha:/opt/shellscript# ls -la 16 | total 12 17 | drwxr-xr-x 3 root root 4096 Oct 1 10:33 . 18 | drwxr-xr-x 5 root root 4096 Oct 1 10:34 .. 19 | drwxr-xr-x 2 root root 4096 Oct 1 10:33 advance_file 20 | -rw-r--r-- 1 root root 0 Oct 1 10:33 glorious 21 | ``` 22 | 23 | Dari sample tersebut `glourious` memiliki permission 644 yang dimana untuk user selain root hanya bisa diperbolehkan membaca tanpa write dan execute. Disini kita cobaa ubah ke chmod 711 agar user lain tidak bisa baca dan write ke file 24 | 25 | ```bash 26 | root@alpha:/opt/shellscript# chmod 711 glorious && ls -l 27 | total 4 28 | drwxr-xr-x 2 root root 4096 Oct 1 10:33 advance_file 29 | -rwx--x--x 1 root root 0 Oct 1 10:33 glorious 30 | ``` 31 | 32 | Disini kita experiment ada 2 user yaitu user ichigo dan kyora. Disini kita coba dulu kedua user membaca file `glorious` tanpa kita ubah dulu ownernya. 33 | 34 | ```bash 35 | # with user kyora 36 | kyora@alpha:/opt/shellscript$ cat glorious 37 | cat: glorious: Permission denied 38 | kyora@alpha:/opt/shellscript$ 39 | 40 | # with user ichigo 41 | ichigo@alpha:/opt/shellscript$ cat glorious 42 | cat: glorious: Permission denied 43 | ichigo@alpha:/opt/shellscript$ 44 | ``` 45 | 46 | Result nya kedua user tersebut tidak bisa membaca file tersebut, kita coba pakai `chown` untuk mengubah kepemilikan file kepada kyora 47 | ```bash 48 | # change owner to kyora 49 | root@alpha:/opt/shellscript# chown kyora glorious 50 | 51 | # login to kyora 52 | root@alpha:/opt/shellscript# su kyora 53 | kyora@alpha:/opt/shellscript$ cat glorious 54 | hello world 55 | 56 | # login to ichigo 57 | root@alpha:/opt/shellscript# su ichigo 58 | ichigo@alpha:/opt/shellscript$ cat glorious 59 | cat: glorious: Permission denied 60 | ``` 61 | Hiyaaa jadi kurang lebih fungsi utama dari chown mengubah kepemilikan by user dan by group. Hal ini sering digunakan agar per-user punya hak akses untuk tertentu ke tiap file. Ini juga sebenarnya telah diterapkan di folder `/home` dimana tiap folder tersebut punya owner dan group ownerya masing-masing. 62 | 63 | ```cmd 64 | root@alpha:/home# ls -l 65 | total 20 66 | drwxr-xr-x 3 admin admin 4096 May 18 10:34 admin 67 | drwxr-xr-x 2 alpha alpha 4096 Jul 29 2022 alpha 68 | drwxr-xr-x 3 ichigo ichigo 4096 Oct 1 10:41 ichigo 69 | drwxr-xr-x 3 kiyo kiyo 4096 Mar 29 2024 kiyo 70 | drwxr-xr-x 3 kyora kyora 4096 Oct 1 10:40 kyora 71 | ``` 72 | 73 | # Cheatsheet 74 | 75 | | Command | Deskripsi | 76 | |----------------------|-------------------------------------------------------------------------| 77 | | chown user | change owner user | 78 | | chown -R user | change owwner ke semua file / folder didalam satu directory | 79 | | chown user:group | change owner user dan group | 80 | | chown -R user:group | change owner user dan group ke semua file / folder dalam satu directory | 81 | | chgrp group | change group owner | 82 | | chgrp -R group | change group owner semua file / folder didalam satu directory | 83 | 84 | 85 | > Semua linux untuk aturan management owner itu sama! 86 | -------------------------------------------------------------------------------- /advance/01_advance_file/advance_file.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "create two new user ...." 4 | sleep 2 5 | useradd monkey && echo -e "1\n1\n" | passwd monkey 6 | sleep 2 7 | useradd pox && echo -e "1\n\1n" | passwrd pox 8 | 9 | echo "create folder to opt ...." 10 | sleep 2 11 | mkdir /opt/shellscript && echo "glorious purpose" > /opt/shellscript/glorious 12 | 13 | echo "change to monkey ..." 14 | chown -R monkey:monkey /opt/shellscript 15 | -------------------------------------------------------------------------------- /advance/03_user_administration/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | ![bn](https://user-images.githubusercontent.com/73097560/115834477-dbab4500-a447-11eb-908a-139a6edaec5c.gif) 7 | 8 | ## User Administration 9 | Hiyaa, materi ini adalah materi tentang management user yang ada di dalam linux. Pada dasarnya semua operating system itu sama, memiliki fitur group dan user yang dimana memiliki rule dan aturan yang berbeda-beda tiap usernya. Nah, mungkin kalau di OS tercinta **windows** sudah terbiasa, kali ini kita bahas di Linux operasi si paling Open Source :u. 10 | 11 | ## Tahta User 12 | Dalam linux ada beberapa tahta user yang tersedia. Tiap tiap user ini memiliki batasan nya masing-masing ada yang hanya bisa akses di local home dia, akses sebagai root / **god**, dan terakhir ialah **root as god** user yang memiliki semua akses baik kill service, create user, lihat all log, dll. Oyaa, di Linux juga terdapat beberapa user yang dari awal sudah terbentuk yang disebut sebagai _**guest user**_ selain itu ada juga user yang hanya sebatas bisa akses home foldernya saja bisa dikatakan sebagai _**guest user**_ 13 | 14 | | Nama | Deskripsi | 15 | |----------------------|----------------------------------------------------------------------------| 16 | | **Root User** | user dengan tahta tertinggi semua keputusan ada di tangan user ini :u | 17 | | Standar User | user yang hanya bisa akses home foldernya dan beberapa `/path` tertentu | 18 | | Guest User | user yang sedari awal install sudah ada | 19 | | System User | user ini akan ada ketika kita install service tertentu | 20 | | User Groups | user yang masuk kedalam groups ini berlaku dengan group sudo juga | 21 | | Sudo User | yaa ini user yang memiliki akses layaknya root atas izin root itu sendiri | 22 | 23 | # Management User 24 | Ada beberapa command untuk memanagement user baik create, delete, adjust, dan grouping user. Mungkin dari kalian semua telah memakai command ini karena memang ini hal basic yang wajib diketahui ketika belajar linux 25 | 26 | ```bash 27 | # menambahkan user baru dengan useradd 28 | $ useradd kyora 29 | 30 | # menambahkan user baru dengan adduser 31 | $ adduser kyora 32 | ... 33 | ``` 34 | 35 | Kedua command diatas memiliki fungsional yang sama dalam membuat user baru. Hanya saja, untuk adduser sendiri bisa langsung adjust password yang kita inginkan dan password yang diinginkan. Ada beberapa juga command yang berguna untuk management user 36 | ``` bash 37 | # edit password one line command 38 | echo -e "password\nretype_password\n" | passwd kyora 39 | 40 | # delete user 41 | userdel kyora 42 | 43 | # usermod untuk menambahkan user kedalam group (contohnya) 44 | usermod -aG sudo kyora 45 | ``` -------------------------------------------------------------------------------- /advance/03_user_administration/user_administration.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | echo -e "check os ..." 5 | check_os() { 6 | . /etc/os-release 7 | case $ID in 8 | ubuntu | debian) apt install sudo -y 9 | ;; 10 | centos) yum install sudo -y 11 | ;; 12 | *) echo "You cant install manually read docs os" 13 | ;; 14 | esac 15 | } 16 | 17 | if [ "$(dpkg -l | awk '/sudo/ {print }' | wc -l)" -le 1 ]; 18 | then 19 | check_os 20 | fi 21 | 22 | echo -e "create new user kyora ..." 23 | useradd kyora && echo -e "1\n\1n" | passwd kyora 24 | 25 | echo -e "add kyora to sudoers ..." 26 | usermod -aG sudo kyora -------------------------------------------------------------------------------- /advance/04_system_logging/README.md: -------------------------------------------------------------------------------- 1 | ## Directory Tree 2 | ```cmd 3 | root@alpha:/opt/shellscript# tree /var/log/ 4 | /var/log/ 5 | ├── alternatives.log 6 | ├── alternatives.log.1 7 | ├── alternatives.log.2.gz 8 | ├── alternatives.log.3.gz 9 | ├── alternatives.log.4.gz 10 | ├── alternatives.log.5.gz 11 | ├── alternatives.log.6.gz 12 | ├── alternatives.log.7.gz 13 | ├── apache2 14 | │ ├── access.log 15 | │ ├── access.log.1 16 | │ ├── access.log.2.gz 17 | │ ├── error.log 18 | │ ├── error.log.1 19 | │ ├── error.log.2.gz 20 | │ ├── error.log.3.gz 21 | │ ├── error.log.4.gz 22 | │ ├── error.log.5.gz 23 | │ └── other_vhosts_access.log 24 | ├── apt 25 | │ ├── eipp.log.xz 26 | │ ├── history.log 27 | │ ├── history.log.10.gz 28 | │ ├── history.log.11.gz 29 | │ ├── history.log.1.gz 30 | │ ├── history.log.2.gz 31 | │ ├── history.log.3.gz 32 | │ ├── history.log.4.gz 33 | │ ├── history.log.5.gz 34 | │ ├── history.log.6.gz 35 | │ ├── history.log.7.gz 36 | │ ├── history.log.8.gz 37 | │ ├── history.log.9.gz 38 | │ ├── term.log 39 | │ ├── term.log.10.gz 40 | │ ├── term.log.11.gz 41 | │ ├── term.log.1.gz 42 | │ ├── term.log.2.gz 43 | │ ├── term.log.3.gz 44 | │ ├── term.log.4.gz 45 | │ ├── term.log.5.gz 46 | │ ├── term.log.6.gz 47 | │ ├── term.log.7.gz 48 | │ ├── term.log.8.gz 49 | │ └── term.log.9.gz 50 | ├── auth.log 51 | ├── auth.log.1 52 | ├── auth.log.2.gz 53 | ├── auth.log.3.gz 54 | ├── auth.log.4.gz 55 | ├── btmp 56 | ├── btmp.1 57 | ├── cups 58 | │ ├── access_log 59 | │ ├── access_log.1 60 | │ ├── access_log.2.gz 61 | │ ├── access_log.3.gz 62 | │ ├── access_log.4.gz 63 | │ ├── access_log.5.gz 64 | │ ├── access_log.6.gz 65 | │ ├── access_log.7.gz 66 | │ ├── error_log 67 | │ └── error_log.1 68 | ├── customlog 69 | ├── daemon.log 70 | ├── daemon.log.1 71 | ├── daemon.log.2.gz 72 | ├── daemon.log.3.gz 73 | ├── daemon.log.4.gz 74 | ├── dbconfig-common 75 | │ ├── dbc.log 76 | │ ├── dbc.log.1 77 | │ ├── dbc.log.2 78 | │ └── dbc.log.3 79 | ├── debug 80 | ├── debug.1 81 | ├── debug.2.gz 82 | ├── debug.3.gz 83 | ├── debug.4.gz 84 | ├── dpkg.log 85 | ├── dpkg.log.1 86 | ├── dpkg.log.10.gz 87 | ├── dpkg.log.11.gz 88 | ├── dpkg.log.2.gz 89 | ├── dpkg.log.3.gz 90 | ├── dpkg.log.4.gz 91 | ├── dpkg.log.5.gz 92 | ├── dpkg.log.6.gz 93 | ├── dpkg.log.7.gz 94 | ├── dpkg.log.8.gz 95 | ├── dpkg.log.9.gz 96 | ├── faillog 97 | ├── fontconfig.log 98 | ├── hp 99 | │ └── tmp 100 | ├── installer 101 | │ ├── cdebconf 102 | │ │ ├── questions.dat 103 | │ │ └── templates.dat 104 | │ ├── hardware-summary 105 | │ ├── lsb-release 106 | │ ├── partman 107 | │ ├── status 108 | │ └── syslog 109 | ├── kern.log 110 | ├── kern.log.1 111 | ├── kern.log.2.gz 112 | ├── kern.log.3.gz 113 | ├── kern.log.4.gz 114 | ├── lastlog 115 | ├── mail.info 116 | ├── mail.info.1 117 | ├── mail.info.2.gz 118 | ├── mail.log 119 | ├── mail.log.1 120 | ├── mail.log.2.gz 121 | ├── mail.warn 122 | ├── mail.warn.1 123 | ├── messages 124 | ├── messages.1 125 | ├── messages.2.gz 126 | ├── messages.3.gz 127 | ├── messages.4.gz 128 | ├── mysql 129 | │ ├── error.log 130 | │ ├── error.log.1 131 | │ ├── error.log.4.gz 132 | │ ├── error.log.5.gz 133 | │ ├── error.log.6.gz 134 | │ ├── error.log.7.gz 135 | │ └── error.log.8.gz 136 | ├── nginx 137 | │ ├── access.log 138 | │ ├── access.log.1 139 | │ ├── error.log 140 | │ ├── error.log.1 141 | │ ├── error.log.2.gz 142 | │ └── error.log.3.gz 143 | ├── openvpn 144 | │ ├── openvpn.log 145 | │ └── openvpn-status.log 146 | ├── private 147 | ├── proftpd 148 | │ ├── controls.log 149 | │ ├── proftpd.log 150 | │ ├── proftpd.log.1 151 | │ ├── proftpd.log.2.gz 152 | │ ├── proftpd.log.3.gz 153 | │ ├── proftpd.log.4.gz 154 | │ ├── xferlog 155 | │ ├── xferlog.1 156 | │ └── xferreport 157 | ├── roundcube 158 | │ ├── errors 159 | │ └── errors.1 160 | ├── syslog 161 | ├── syslog.1 162 | ├── syslog.2.gz 163 | ├── syslog.3.gz 164 | ├── syslog.4.gz 165 | ├── syslog.5.gz 166 | ├── syslog.6.gz 167 | ├── syslog.7.gz 168 | ├── unattended-upgrades 169 | │ ├── unattended-upgrades-shutdown.log 170 | │ ├── unattended-upgrades-shutdown.log.1.gz 171 | │ ├── unattended-upgrades-shutdown.log.2.gz 172 | │ ├── unattended-upgrades-shutdown.log.3.gz 173 | │ ├── unattended-upgrades-shutdown.log.4.gz 174 | │ ├── unattended-upgrades-shutdown.log.5.gz 175 | │ └── unattended-upgrades-shutdown.log.6.gz 176 | ├── user.log 177 | ├── user.log.1 178 | └── wtmp 179 | 180 | 15 directories, 159 files 181 | ``` 182 | 183 | ## System Logging 184 | Pada dasarnya setiap system itu butuh file log untuk memantau aktivitas yang dilakukan di dalam system. Materi kali ini sebenarnya materi tambahan yang dimana materi shell scripting sudah selesai hanya sampai [User Administration](../03_user_administration/) saja. Namun sisa materi yang ada adalah tambahan saja yang sedikit berkaitan dengan shell scripting. Kembali ke system logging, bisa diliat di atas kalau banyak sekali file-file yang penting, tapi di materi ini kita tidak bahas semuanya hanya sebagian saja 185 | 186 | ### /var/log/syslog 187 | File logger yang berisikan aktivitas didalam system. File ini sering sekali digunakan untuk memantau aktivitas yang ada. Tidak ada yang spesial di sini, kalian bisa memantau log dengan command `tail -f` untuk melihat apa saja yang terjadi di system 188 | 189 | ```cmd 190 | root@alpha:~# tail -f /var/log/syslog 191 | Oct 2 09:24:08 alpha systemd[1]: Started Authorization Manager. 192 | Oct 2 09:24:08 alpha dbus-daemon[467]: [system] Successfully activated service 'org.freedesktop.PackageKit' 193 | Oct 2 09:24:08 alpha systemd[1]: Started PackageKit Daemon. 194 | Oct 2 09:24:10 alpha systemd[1]: media-cdrom0.mount: Succeeded. 195 | Oct 2 09:24:10 alpha systemd[1376]: media-cdrom0.mount: Succeeded. 196 | Oct 2 09:29:13 alpha PackageKit: daemon quit 197 | Oct 2 09:29:13 alpha systemd[1]: packagekit.service: Main process exited, code=killed, status=15/TERM 198 | Oct 2 09:29:13 alpha systemd[1]: packagekit.service: Succeeded. 199 | Oct 2 09:35:23 alpha systemd[1]: session-4.scope: Succeeded. 200 | Oct 2 09:37:25 alpha systemd[1]: Started Session 8 of user root. 201 | Oct 2 09:39:01 alpha CRON[2038]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi) 202 | Oct 2 09:39:01 alpha systemd[1]: Starting Clean php session files... 203 | Oct 2 09:39:01 alpha systemd[1]: phpsessionclean.service: Succeeded. 204 | Oct 2 09:39:01 alpha systemd[1]: Started Clean php session files. 205 | 206 | ``` 207 | 208 | ### /var/log/auth.log 209 | Berbeda dengan `syslog`, log ini digunakan untuk melihat siapa yang sedang melakukan _authentication_ ke server, semua record nya akan dibaca baik yang gagal atau yang berhasil. Sebagai contoh disini bahwa ip address `192.168.100.10` berhasil login ke systemnya 210 | 211 | ```cmd 212 | root@alpha:~# tail -f /var/log/auth.log 213 | ... 214 | Oct 2 09:35:23 alpha systemd-logind[463]: Removed session 4. 215 | Oct 2 09:37:25 alpha sshd[2018]: Accepted password for root from 192.168.100.10 port 3112 ssh2 216 | Oct 2 09:37:25 alpha sshd[2018]: pam_unix(sshd:session): session opened for user root by (uid=0) 217 | Oct 2 09:37:25 alpha systemd-logind[463]: New session 8 of user root. 218 | Oct 2 09:39:01 alpha CRON[2037]: pam_unix(cron:session): session opened for user root by (uid=0) 219 | Oct 2 09:39:01 alpha CRON[2037]: pam_unix(cron:session): session closed for user root 220 | ``` 221 | 222 | ### /var/log/apt/history.log 223 | Log yang berguna untuk melihat history installasi package di dalam system. Yaa seperti history pada umumnya saja, ini cuma berisikan waktu dan apa yang telah diinstall terakhir kalinya 224 | 225 | ```cmd 226 | root@alpha:~# tail -f /var/log/apt/history.log 227 | 228 | Start-Date: 2024-10-02 09:23:58 229 | Commandline: apt install tree 230 | Install: tree:amd64 (1.8.0-1) 231 | End-Date: 2024-10-02 09:24:02 232 | ... 233 | ``` 234 | 235 | ### /var/log/kern.log 236 | Sama pada umumnya, `kern.log` digunakan untuk memantau aktifivitas kernel yang terjadi. Record nya seperti yang lain berisikan kapan dan apa yang telah terjadi 237 | 238 | ```cmd 239 | root@alpha:~# tail -f /var/log/kern.log 240 | Oct 2 08:14:41 alpha kernel: [ 25.264467] tun: Universal TUN/TAP device driver, 1.6 241 | Oct 2 08:14:58 alpha kernel: [ 42.198990] audit: type=1400 audit(1727871298.830:12): apparmor="STATUS" operation="profile_load" profile="unconfined" name="docker-default" pid=1178 comm="apparmor_parser" 242 | Oct 2 08:15:05 alpha kernel: [ 48.675275] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this. 243 | ... 244 | ``` 245 | 246 | ## Kesimpulan 247 | System logging pada semua operating system termasuk linux semuanya sama. Di linux kali ini setiap service yang telah terinstall akan mendapatkan file log yang digunakan untuk memantau hasilnya atau outputnya. Namun kalian juga bisa custom log untuk di assign ke `syslog`, karena itu ada cheatsheet untuk kalian yang mungkin saja berguna hehe :u 248 | 249 | | Command | Deskripsi | 250 | |----------------------|-----------------------------------------------------------------------------| 251 | | logger -f file | command yang berguna assign log file ke `syslog` | 252 | | lastb -n {count} | command untuk check bmtp yang terjadi di system | 253 | | systemctl status {s} | ini digunakan untuk check status dari service | 254 | | journalctl -xe | command yang digunakan untuk check yang terjadi ketika service ada problem | 255 | | lastlog | untuk melihat setiap user kapan terakhir login disini juga ada info ip nya | -------------------------------------------------------------------------------- /advance/04_system_logging/system_logging.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Ini adalah custom logger" > test.log 4 | logger -f test.log -------------------------------------------------------------------------------- /advance/README.md: -------------------------------------------------------------------------------- 1 | # Shell Scriptting 2 | 3 | Script Shell adalah program komputer yang dirancang oleh shell Unix/Linux yang dapat berupa salah satunya adalah: 4 | 5 | - bourne shell 6 | - C shell 7 | - korn shell 8 | - GNU bourne-again shell 9 | 10 | Shell adalah penerjemah baris perintah dan operasi tipikal yang dilakukan oleh skrip shell termasuk manipulasi file, eksekusi program, dan pencetakan teks. 11 | 12 | Skrip shell memiliki beberapa konstruksi yang diperlakukan yang memberi tahu lingkungan shell apa yang harus dilakukan dan kapan melakukannya. tentu saja, sebagian besar skrip lebih kompleks. 13 | 14 | Bagaimanapun juga, shell adalah bahasa pemograman yang nyata, lengkap dengan variable, struktur kontrol, dan sebagainya. tidak perduli sberapa rumit sebuah skrip, itu masih hanya daftar perintah yang dieksekusi secara berurutan. 15 | 16 | Minimum untuk menjalani pogram shell: 17 | 18 | - Windows 19 | 20 | Dari Windows menyarankan untuk mengaktifkan [**Windows Subsystem for Linux**](https://docs.microsoft.com/en-us/windows/wsl/) untuk menjalankan program shell. 21 | 22 | - Linux _atau_ Mac OS 23 | 24 | Kita tidak perlu mengaktifkan beberapa kebutuhan dan lain-lain karena shell ini dirancang untuk Linux dan Mac OS(Unix). 25 | 26 | > Next : Regular Expression 27 | -------------------------------------------------------------------------------- /basic/00_hello_world/README.md: -------------------------------------------------------------------------------- 1 | # hello world 2 | 3 | shell adalah bahasa pemograman yang menerjemahkan bahasa manusia ke bahasa komputer dalam sistem operasi linux / unix. komputer hanya mengerti bahasa biner yaitu 0 dan 1, sehingga diciptakanlah bahasa pemograman yagn memudahkan komnuikasi manusia dan komputer. 4 | 5 | contoh sederhana hello world dari shell programming 6 | 7 | ``` 8 | # echo merupakan perintah output dari shell scripting 9 | echo "kata" 10 | 11 | ```bash 12 | echo "hello world" 13 | ``` 14 | 15 | ini dapat digunakan pada terminal dan bisa juga disimpan dalam file yang berekstensi ``.sh`` yang memungkinkn kita akan menjalankannya nanti. -------------------------------------------------------------------------------- /basic/00_hello_world/hello_world.sh: -------------------------------------------------------------------------------- 1 | echo "hello world" 2 | -------------------------------------------------------------------------------- /basic/01_variabel/README.md: -------------------------------------------------------------------------------- 1 | # Variabel 2 | 3 | Variabel, adalah string karakter yang kita beri nilai, nilai yang diberikan dpat berup anka, teks, nama file, perangkat atau jenis data lainnya. 4 | 5 | variabel tidak lebih dari petunjuk ke data aktual. shell memungkinkan kita untuk membuat, menetapkan dan menghapus variabel. 6 | 7 | nama variabel hanya boleh berisi huruf( a sampai z atau A sampai Z) angka (0 sampai 9) atau karakter garis bawah ( ``_`` ) 8 | 9 | dengan peraturan conventional shell, penamaan variabel haru berifat uppercase atau huruf kapital. 10 | 11 | contoh nama variabel yang vaild 12 | ``` 13 | _NAMA 14 | NAMA_VARIABEL 15 | VARIABEL_1 16 | VARIAABEL_KE_2 17 | ``` 18 | 19 | berikut contoh dari variabel yang tidak valid 20 | ``` 21 | 1_NAMA 22 | -NAMA_VARIABEL 23 | VARIABEL1-VARIABEL2 24 | VARIABEL3! 25 | ``` 26 | 27 | alasan kita tidak dapat menggunakan karakter sepert !, &, atau -, karena karakter ini meiliki arti khusus untuk shell. 28 | 29 | ## mendifinsikan variabel 30 | 31 | variabel didefinisikan sebagai berikut 32 | ``` 33 | VARIABEL=VALUE 34 | ``` 35 | 36 | contoh diatass mendifinisikan variabel dan memberikan nilai padanya, variabel jenis ini disebut dengan **variabel skalar**. variabel skalar hanya dapat menampung satu nilai pada satu waktu. shell memungkinkn kita untuk menyimpan nilai apapun yang diingkan dalam sebuah variabel. 37 | 38 | ## mengakses nilai 39 | 40 | untuk mengakses nilai yang disimpan dalam variabel. awali pemanggila dengan tanda dolar ($) sebagai contoh 41 | 42 | ```bash 43 | NAMA="james cameroon" 44 | echo $NAMA 45 | ``` 46 | 47 | ## variabel read only 48 | 49 | shell juga menyediakan cara untuk menandai variabel sebagai read-only dengan menggunakan perintah ``readonly``. setelah variabel ditandai, maka nilainya tidak dapat diubah. 50 | 51 | ```bash 52 | NAMA="adam levine" 53 | readonly NAMA 54 | NAMA="james cameroon" 55 | ``` 56 | 57 | jika dijalankan maka akan menghasilkan 58 | ``` 59 | /bin/sh: NAME: This variable is read only. 60 | ``` 61 | 62 | ## variabel unset 63 | 64 | unset atau menghapus variabel mengarahkan shell untuk menghapus variabel dari daftar variabel yang dilacaknya. setelah kita menghapus variabel. kita dapat mengakses nilai yang disimpan dalam variabel. contoh sintaks dari menghapus variabel 65 | 66 | ``` 67 | unset NAMA_VARIABEL 68 | ``` 69 | 70 | perintah diatas menghapus nilai dari variabel yng ditentukan. 71 | 72 | ```bash 73 | NAMA="james cameroon" 74 | unset NAMA 75 | echo $NAMA 76 | ``` 77 | 78 | contoh di atas tidak mencetak apapun. kita tidak dapat menggunakan perintah **unset** untuk menghapus variabel yang ditandai **readomly** 79 | 80 | -------------------------------------------------------------------------------- /basic/01_variabel/variabel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # membuat variabel 4 | NAMA="adam levine" 5 | NAMA_KEDUA="sherlock holmes" 6 | NAMA_3="tony stark" 7 | ANGKA_BELASAN=15 8 | 9 | # membuat variabel nama read only 10 | # atau nilainya tidak bisa dirubah 11 | # jika dirubah maka nilai tersebut tidak akan terganti 12 | readonly NAMA 13 | # NAMA = "selena gomez" 14 | 15 | # mengakses ketiga variabel 16 | echo $NAMA 17 | echo $NAMA_KEDUA 18 | echo $NAMA_3 19 | echo $ANGKA_BELASAN 20 | 21 | -------------------------------------------------------------------------------- /basic/02_variabel_spesial/README.md: -------------------------------------------------------------------------------- 1 | # Variabel spesial 2 | 3 | dalam materi sebelumnya, kita memahami bagaimana berhati-hati saat kita menggunakan karakter non alfanumerik tertentu dalam sebuah variabel, ini karena karakter tersebut digunakan dalam nama variabel shell khusu. variabel ini dicadangkan untuk fungsi tertentu. 4 | 5 | misalnya, karakter ``$`` mewakili proses id atau **PID** dari shell 6 | 7 | ```bash 8 | echo $$ 9 | ``` 10 | 11 | berikut variabel khusus yang bisa kita gunakan dalam script shell. 12 | 13 | | variabel | deskripsi | 14 | | ----------- | ----------- | 15 | | ``$0`` | nama file saat ini | 16 | | ``$#`` | jumlah argumen yang diberikan ke script | 17 | | ``$*`` | semua argumen dikutip ganda, jika script menermua dua argumen, ``$*`` sama dengan $1 $2| 18 | | ``$@`` | semua argumen secara indvidual dikutip ganda, jika skrip menerima dua argumen, $@ ama dengan $1 $2 | 19 | | ``$?`` | status keluar dari perintah terakhir yang diekseskusi | 20 | | ``$$`` | nomor proses dari shell saat ini. ini adalah id proses yang dijalankannya | 21 | | ``$!`` | nomor proses dari perintah latar belakang terakhir | 22 | 23 | ## status keluar 24 | 25 | variabel ``$?`` mewakili tatu keluar dari perintah ebelumnya. status keluar adalah nilai numerik yang dikembalikan oleh setiap perintah setelah selesai. sebagai aturan, sebagian besar perintah mengembalikan status keluar 0 jika berhasil, dan jika 1 maka tidak berhasil. 26 | 27 | beberapa perintah mengembalikan status keluar tambahan karena alasan tertentu, misalnya, beberapa perintah membedakan antara jenis kesalahan dan akan mengembalikan bebrbagai nilai keluar tergantung pada jenis kegagalan. tertentu. 28 | 29 | -------------------------------------------------------------------------------- /basic/02_variabel_spesial/variabel_spesial.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | NAMA="arfy" 4 | NAMA2="slowy" 5 | 6 | echo $? 7 | echo $$ 8 | echo "$NAMA" 9 | echo "$NAMA2" 10 | 11 | -------------------------------------------------------------------------------- /basic/03_operator/README.md: -------------------------------------------------------------------------------- 1 | # operator 2 | 3 | ada berbagai operator yang didukung oleh setiap shell antara lain 4 | - operator aritmatika 5 | - operator relasional 6 | - operator boolean 7 | - operator string 8 | - operator string 9 | - operator Tes file 10 | 11 | ## operator aritmatika 12 | Bourne shell awalnya tidak memiliki mekanisme untuk melakukan operasi aritmatika sederhana tetapi menggunakan program eksternal, baik **awk** atau **expr**. 13 | 14 | contoh operator aritmatikan antara lain yaitu 15 | - penambahan (``+``) 16 | - pengurangan (``-``) 17 | - perkalian (``*``) 18 | - pembagian (``\``) 19 | - modulus (``%``) 20 | 21 | ## operator relasional 22 | 23 | Bourne Shell mendukung operator relasional berikut yang khusus untuk nilai numerik. Operator ini tidak bekerja untuk nilai string kecuali nilainya numerik. 24 | 25 | Misalnya, operator berikut akan bekerja untuk memeriksa hubungan antara 10 dan 20 serta di antara "10" dan "20" tetapi tidak di antara "sepuluh" dan "dua puluh". 26 | 27 | ```shell 28 | ``` 29 | 30 | 31 | - ``-eq`` 32 | 33 | memeriksa apakah nilai dua operan sama atau tidak;, jika ya, maka kondisinya menjadi benar. 34 | 35 | - ``-ne`` 36 | 37 | memeriksa apakah nilai dua opran sama atau tidak; jika nilainya tidak sama, maka kondisinya menjadi benar. 38 | 39 | - ``-gt`` 40 | 41 | memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan; jika ya, maka kondisinya menjadi benar. 42 | 43 | - ``-lt`` 44 | 45 | memeriksa apakah nilai operan kiri kurang dari nilai operan kanan; jika ya, maka kondisinya menjadi benar. 46 | 47 | - ``-ge`` 48 | 49 | memeriksa apakah nilai operan kiri lebih besar atau sama dengan niai operan kanan jika ya, maka kondisinya menjadi benar. 50 | 51 | - ``-le`` 52 | 53 | memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan; jika ya, maka kondisinya menjadi benar. 54 | 55 | 56 | ## operator boolean 57 | 58 | Operator Boolean berikut ini didukung oleh Bourne Shell. 59 | 60 | Asumsikan variabel a menampung 5 dan variabel b menampung 3- maka 61 | 62 | - ``!`` 63 | 64 | ini adalah negasi logis. ini membalikkan kondisi benar menjadi salah dan sebaiknya 65 | ``` 66 | [!false] benar 67 | ``` 68 | 69 | - ``o`` 70 | 71 | ini logis **atau**. jika salah satu operan benar, maka kondisinya menjadi benar. 72 | ``` 73 | [$a -lt 20 -o $b -gt 100] benar 74 | ``` 75 | 76 | - ``a`` 77 | 78 | ini adalah logis **dan**. jika kedua operan benar, maka kondisi menjadi benar jika tidak salah 79 | ``` 80 | [$a -lt 20 -a $b -gt 100] salah 81 | ``` 82 | 83 | -------------------------------------------------------------------------------- /basic/03_operator/aritmatika.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | penjumlahan=`expr 2 + 2` 4 | pengurangan=`expr 5 - 3` 5 | perkalian=`expr 3 * 4` 6 | pembagian=`expr 6 / 2` 7 | 8 | echo "Hasil penjumlahan 2 + 2 = $penjumlahan" 9 | echo "Hasil pengurangan 5 - 3 = $pengurangan" 10 | echo "Hasil perkalian 3 * 4 = $perkalian" 11 | echo "Hasil pembagian 6 / 2 = $pembagian" 12 | -------------------------------------------------------------------------------- /basic/04_perform_arimathic_operations/README.md: -------------------------------------------------------------------------------- 1 | Perform Arimathic Operations ialah sebuah metode dimana memanipulasi operasi aritmatika yang menggunakan tanda `$` untuk melakukan operasi. Lalu bagaimana formatnya om? Okey, formatnya tuh seperti ini 2 | 3 | ```bash 4 | variabel1=number 5 | variabel2=number 6 | 7 | echo $((variabel1 + variabel2)) 8 | echo $((variabel1 - variabel2)) 9 | echo $((variabel1 / variabel2)) 10 | echo $((variabel1 * variabel2)) 11 | ``` 12 | 13 | Jadi tanda `$` menandakan bahwa yang kita masukkan itu adalah sebuah variabel, bukanlah sebuah string ataupun angka. Oke, lalu bagaimana contohnya? Seperti ini contohnya 14 | 15 | ```bash 16 | variabel1=20 17 | variabel2=15 18 | 19 | echo $((variabel1 + variabel2)) 20 | echo $((variabel1 - variabel2)) 21 | echo $((variabel1 / variabel2)) 22 | echo $((variabel1 * variabel2)) 23 | 24 | Output : 25 | 35 26 | 5 27 | 1 28 | 300 29 | ``` 30 | 31 | Namun ada lagi selain dari `$` ada namanya `expr` dimana fungsi nya itu sebagai mengekspresikan output dari nilai value, yang dimana ekspresi yang dimaksud ini antara lain pertambahan, pengurangan, pembagian dan perkalian. Formatnya seperti ini 32 | 33 | ```bash 34 | variabel1=number 35 | variabel2=number 36 | 37 | echo $(expr $variabel1 + $variabel2) 38 | echo $(expr $variabel1 - $variabel2) 39 | echo $(expr $variabel1 \* $variabel2) 40 | echo $(expr $variabel1 / $variabel2) 41 | ``` 42 | 43 | Eits sebentar kenapa yang operasi perkalian dijadikan seperti ini `\*`, jadi pada method `expr` sendiri ini operasi perkalian menggunakan arimethic expression yaitu dengan tanda backslash. Contohnya seperti ini 44 | 45 | ```bash 46 | variabel1=20 47 | variabel2=15 48 | 49 | echo $(expr $variabel1 + $variabel2) 50 | echo $(expr $variabel1 - $variabel2) 51 | echo $(expr $variabel1 \* $variabel2) 52 | echo $(expr $variabel1 / $variabel2) 53 | 54 | Output : 55 | 35 56 | 5 57 | 300 58 | 1 59 | ``` 60 | -------------------------------------------------------------------------------- /basic/04_perform_arimathic_operations/pao1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | num1=20 4 | num2=15 5 | 6 | echo $((num1+num2)) 7 | echo $((num1-num2)) 8 | echo $((num1/num2)) 9 | echo $((num1*num2)) 10 | 11 | -------------------------------------------------------------------------------- /basic/04_perform_arimathic_operations/pao2-expr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | num1=20 4 | num2=15 5 | 6 | echo $(expr $num1 + $num2) 7 | echo $(expr $num1 - $num2) 8 | echo $(expr $num1 \* $num2) 9 | echo $(expr $num1 / $num2) 10 | 11 | -------------------------------------------------------------------------------- /basic/05_bc_command/README.md: -------------------------------------------------------------------------------- 1 | BC Command ialah merupakan command yang telah disediakan oleh bash dalam meng-operasikan bilangan. Uniknya di bc ini kita bisa meng-operasikan antara bilangan integer dan bilangan float , menarik bukan. Mari kita bahas tuntas tentang BC Command 2 | 3 | Method `bc` ialah sebuah method yang dimana method dari singkatan `basic calculator` dimana disin kita dapat melakukan operasi matematika dengan bilangan apapun. Lalu bagaimana formatnya? Nah formatnya seperti ini 4 | 5 | ```bash 6 | variabel1=num 7 | variabel2=num 8 | 9 | echo $variabel1+$variabel2 | bc 10 | ``` 11 | 12 | Loh heh formatnya seperti itu saja? mudah banget dong. Ya tentu saja inilah yang menarik dari bash dimana kita bisa membuat script kita menjadi lebih efisien, lalu apakah bisa digunakan dengan oneline script? Bisa saja contoh formatnya seperti ini 13 | 14 | ```bash 15 | echo "var=num;var+=20.5;var" | bc 16 | ``` 17 | 18 | Nah uniknya kita bisa representasikan operator dengan sangat mudah disini, misalkan seperti ini 19 | ``` 20 | Ketika kita ingin menambahkan number sebelumnya dengan number baru bisa menggunakan : += 21 | Ketika kita ingin mengurangi number sebelumnya dengan number baru bisa menggunakan : -= 22 | Ketika kita ingin mengkalikan number sebelumnya dengan number baru bisa menggunakan : *= 23 | Ketika kita ingin membagikan number sebelumnya dengan number baru bisa menggunakan : /= 24 | Ketika kita ingin mempangkatkan number sebelumnya dengan number baru bisa menggunakan : ^= 25 | Ketika kita ingin sisa bagi number sebelumnya dengan number baru bisa menggunakan : %= 26 | ``` 27 | 28 | Lalu bagaimana dengan contohnya? Contohnya sangat mudah , seperti ini 29 | 30 | ```bash 31 | variabel1=10.5 32 | variabel2=10 33 | 34 | echo $variabel1+$variabel2 | bc 35 | 36 | Outputnya : 37 | 20.5 38 | ``` 39 | 40 | Selain contoh diatas kita bisa juga menggunakan script oneline yang dimana meng-efisiensi waktu kita dalam ngoding di bash ini 41 | 42 | ```bash 43 | echo "num=50;num+=20;num" | bc 44 | echo "num=50;num-=20;num" | bc 45 | echo "num=50;num*=20;num" | bc 46 | echo "num=50;num/=20;num" | bc 47 | echo "num=50;num^=20;num" | bc 48 | echo "num=50;num%=20;num" | bc 49 | 50 | Outputnya : 51 | 70 52 | 30 53 | 1000 54 | 2 55 | 9536743164062500000000000000000000 56 | 10 57 | ``` 58 | -------------------------------------------------------------------------------- /basic/05_bc_command/bc1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | variabel1=10.5 4 | variabel2=10 5 | 6 | echo $variabel1+$variabel2 | bc 7 | -------------------------------------------------------------------------------- /basic/05_bc_command/bc2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "num=50;num+=20;num" | bc 4 | echo "num=50;num-=20;num" | bc 5 | echo "num=50;num*=20;num" | bc 6 | echo "num=50;num/=20;num" | bc 7 | echo "num=50;num^=20;num" | bc 8 | echo "num=50;num%=20;num" | bc 9 | -------------------------------------------------------------------------------- /basic/06_instruksi_logika/README.md: -------------------------------------------------------------------------------- 1 | # instruksi logika 2 | 3 | saat menulis skrip shelll, mungkin ketika kita perlu mengadopsi satu jalur dari dua jalur yang diberikan. jadi, kita perlu menggunakan pernyataan bersyarat yang memungkinkan program anda membuat keputusuan yang benar dan melakukan tindakan yang benar. 4 | 5 | unix shell mendukung pernyataan bersyarat yang digunakan untuk melakukan tindakan yang berbeda berdasarkan kondisi yang berbeda. kami sekarang akan memahami dua pernyataan pengambalikan keputusan di sini 6 | 7 | - pernyataan **if else** 8 | - kasus pernyataan **esac** 9 | 10 | ## pernyataan if .. fi 11 | 12 | pernyataan if else adalah pernyataan pengambilan keputusan yang berguna yang dapat digunakan untuk memilih opsi dari serangkain opsi yang diberikan. sintaks 13 | 14 | ``` 15 | if [ekspresi] 16 | then 17 | statemen 18 | fi 19 | ``` 20 | 21 | ekspresi _shell_ dievaluasi dalam sintaks di atas. jika nilai yang dihasilkan adalah _true_. 22 | 23 | ```bash 24 | #!/bin/sh 25 | 26 | a=10 27 | b=30 28 | 29 | if [ $a == $b ] 30 | then 31 | echo "a sama dengan b" 32 | fi 33 | 34 | if [ $a != $b] 35 | then 36 | echo "a tidak sama dengan b" 37 | fi 38 | ``` 39 | 40 | pernyataan **if...else...fi** adalah bentuk berikutnya dari pernyataan kontrol yang memungkinkan shell untuk mengeksekusi pernyataan dengan cara yang terkontrol dan membuat pilihan yang tepat. 41 | 42 | ```shell 43 | if [ ekpresi ] 44 | then 45 | statemen 46 | else 47 | statemen else 48 | fi 49 | ``` 50 | 51 | ```shell 52 | #!/bin/sh 53 | 54 | a=10 55 | b=50 56 | 57 | if [$a == $b] 58 | then 59 | echo "a sama dengan b" 60 | else 61 | echo "a tidak sama dengan b" 62 | fi 63 | ``` 64 | 65 | ## pernyataan if .. elif .. fi 66 | 67 | pernyataan **if .. eif .. fi** adalah bentuk lanjutan dari pernytaan kontrol yang memungkinkan shell membuat keputusan yang benar dari beberapa kondisi. 68 | 69 | ```shell 70 | if [ ekspresi ] 71 | then 72 | statement 73 | elif [ ekspresi ] 74 | then 75 | statement 76 | else 77 | statement 78 | fi 79 | ``` 80 | 81 | **contoh** 82 | 83 | ```bash 84 | a=10 85 | b=60 86 | if [ $a == $b] 87 | then 88 | echo "a sama dengan b" 89 | elif [ $a -gt $b] 90 | then 91 | echo "a lebih besar dari b" 92 | elif [ $a -lt $b ] 93 | then 94 | echo "a lebih kecil dari b" 95 | else 96 | echo "ketiga kondisi tidak terpenhui" 97 | fi 98 | ``` 99 | 100 | ## pernyataan esac 101 | 102 | kita dapat menggunakan beberapa pernyataan **if ... elif** untuk melakukan cabang multiway. Namun, ini tidak selalu merupakan solusi terbaik, terutama ketika semua cabang bergantung pada nilai satu variabel. 103 | 104 | shell mendukugn pernyaataan **case ... esac** yang menangani situasi ini dengan tepat, dan melakukannya lebih efisisien daripada pernyataan ``if ... elif`` berulang. 105 | 106 | sintaks dasar dari pernyataan **case ... esac** adalah memberikan ekspresi untuk mengevaluasi dan mengeksekusi beberapa pernyataan berbeda berdasarkan nilai ekspresi. 107 | 108 | interpreter memerikssa setiap kasus terhadap nilai ekspresi sampai ditemukan kecocokan. jika tidak ada yang cocok, kondisi default akan digunakan. 109 | 110 | ``` 111 | case kata in 112 | pattern1) 113 | statement 114 | pattern2) 115 | statement 116 | pattern3) 117 | statement 118 | *) 119 | default statement 120 | esac 121 | ``` 122 | 123 | penggunaan yang baik untuk pernyataan kasus adalah evaluasi argumen baris perintah sebagi berikut. 124 | 125 | ``` 126 | #!/bin/sh 127 | 128 | buah="kiwi" 129 | case $buah in 130 | "apel") echo "apel adalah buah paling enak" 131 | ;; 132 | "pisang") echo "saya menyukai pisang" 133 | ;; 134 | "kiwi") echo "kiwi adalah buah paling enak" 135 | ;; 136 | esac 137 | ``` 138 | 139 | -------------------------------------------------------------------------------- /basic/06_instruksi_logika/logika1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | a=10 3 | b=50 4 | 5 | if [ $a == $b ] 6 | then 7 | echo "a sama dengan b" 8 | fi 9 | 10 | if [ $a != $b ] 11 | then 12 | echo "a tidak sama dengan b" 13 | fi 14 | -------------------------------------------------------------------------------- /basic/06_instruksi_logika/logika_else.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | a=20 4 | b=50 5 | 6 | if [ $a == $b ] 7 | then 8 | echo "a sama dengan b" 9 | else 10 | echo "a tidak sama dengan b" 11 | fi 12 | 13 | -------------------------------------------------------------------------------- /basic/07_user_input/README.md: -------------------------------------------------------------------------------- 1 | User Input ialah sebuah metode dimana si pengguna / pembuat script akan memasukan data secara manual tidak lagi melalui editing `scriptnya`. Materi ini penting semisalnya kita mendapatkan tugas `biodata` dengan hasil inputan sendiri. Oke langsung saja ke materinya 2 | 3 | Di shell scripting untuk menjadikan sebuah variabel itu inputan dengan method `read`, dimana ini akan menyimpan data hasil inputan kita. Lalu apakah bagaimana strukturnya? seperti ini 4 | 5 | ```bash 6 | echo "SOME_STRING: " 7 | read variabel 8 | ``` 9 | 10 | Selain itu di shell scripting ada yang namanya `prompt` mode. Dimana mode ini sama seperti dengan `-c`, mode `prompt` bisa di persingkat dengan `-p`. Mode prompt juga bisa diolah menjadi progam inputan password dimana data input user tidak terlihat dan hanya memiliki akses mengetik saja dengan sintaks `-sp`, contoh strukturnya seperti ini 11 | 12 | ```bash 13 | read -p "MyName : " username 14 | read -sp "MyPassword : " password 15 | echo 16 | echo "your name is : $username" 17 | echo "your password is : $password" 18 | ``` 19 | 20 | Lalu ada lagi, dimana kondisi ketika kita ingin membuat inputan kita menjadi sebuah array. Bagaimana itu? kita bisa lakukan dengan `-a`. Bagaimana contohnya? seperti ini contohnya 21 | 22 | ```bash 23 | echo "Array Name : " 24 | read -a name 25 | echo "Names : ${name[0]} ${name[1]} ${name[2]}" 26 | ``` 27 | -------------------------------------------------------------------------------- /basic/07_user_input/user-input1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Your Name : " 4 | read name 5 | echo "Your name is $name" 6 | -------------------------------------------------------------------------------- /basic/07_user_input/user-input2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | read -p "MyName : " username 4 | read -sp "MyPassword : " password 5 | echo 6 | echo "your name is : $username" 7 | echo "your password is : $password" 8 | -------------------------------------------------------------------------------- /basic/07_user_input/user-input3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Array Name : " 4 | read -a name 5 | echo "Names : ${name[0]} ${name[1]} ${name[2]}" 6 | -------------------------------------------------------------------------------- /basic/08_array/README.md: -------------------------------------------------------------------------------- 1 | # Array 2 | Array adalah sebuah metode dimana didalamnya terdapat beberapa string ataupun angka. Lalu apa si fungsinya si array ini?. Mari kita kupas tuntas, kenapa array itu penting 3 | 4 | Kita ambil contoh aja seperti ini semisalnya kita ingin membuat banyak data tapi data itu hanya disimpan saja tidak ditampilkan atau hanya bisa diakses dengan cara mengambil data arraynya saja. Maka array adalah cara yang tepat. Contohnya kaya gini yaitu tentang nama nama buah 5 | 6 | ```bash 7 | echo "apel" 8 | echo "mangga" 9 | echo "anggur" 10 | ``` 11 | 12 | Jika kita lakukan seperti diatas tidak efisien apalagi kita hanya ingin `apel` saja yang ingin kita tampilkan bukan `mangga dan anggur`. Lalu bagaimana dengan struktur dari array ? Seperti inilah strukturnya. 13 | 14 | ```bash 15 | var=('string' 'string' 'string') 16 | echo "${var[@]}" 17 | ``` 18 | Nah sebelum lanjut kecontoh pasti bingung dengan tanda `${var[@]}`, nah mari simak dulu apa si fungsinya 19 | 20 | ``` 21 | echo "${var[@]}" => Berarti mengambil isi data array secara keseluruhan 22 | echo "${var[0]}" => Mengambil nilai data dari index 0 23 | echo "${#var[@]}" => Menghitung panjang array 24 | echo "${!var[@]}" => Berarti menampilkan setiap data itu dari index ke berapa 25 | ``` 26 | 27 | Nah mari kita coba membuat array dengan variabel `buah` dan isi datanya itu `apel, mangga, angur` 28 | 29 | ```bash 30 | buah=('apel' 'mangga' 'anggur') 31 | echo "Nama Buahnya adalah : ${buah[@]}" 32 | echo "Nama Buah Index 0 : ${buah[0]}" 33 | echo "Panjang Array : ${#buah[@]}" 34 | echo "Index Setiap Buah : ${!buah[@]}" 35 | 36 | # Output : 37 | # Nama Buahnya adalah : apel mangga anggur 38 | # Nama Buah Index 0 : apel 39 | # Panjang Array : 3 40 | # Index Setiap Buah : 0 1 2 41 | ``` 42 | 43 | Oke semisalnya kita ingin mengubah salah satu data dan memasukan data baru apakah bisa ? Sudah tentu bisa kita akan menggunakan `var[index]="data_baru"`. Contohnya seperti ini 44 | 45 | ```bash 46 | buah=('apel' 'mangga' 'anggur') 47 | buah[3]="semangka" 48 | buah[0]="pir" 49 | echo "Nama Buahnya adalah : ${buah[@]}" 50 | echo "Nama Buah Index 0 : ${buah[0]}" 51 | echo "Panjang Array : ${#buah[@]}" 52 | echo "Index Setiap Buah : ${!buah[@]}" 53 | 54 | # Output : 55 | # Nama Buahnya adalah : pir mangga anggur semangka 56 | # Nama Buah Index 0 : pir 57 | # Panjang Array : 4 58 | # Index Setiap Buah : 0 1 2 3 59 | ``` 60 | Di line 2 script diatas itu `menambahkan data di index 3` dan line 3 `mengubah index 0 menjadi pir` 61 | 62 | Lalu bagaimana ketika kita ingin menghapus data array ? Mudah sekali kita bisa menggunakan method `unset` jadi yang kita lakukan itu `unset var[index]`, contohnya 63 | 64 | ```bash 65 | #!/bin/bash 66 | 67 | buah=('apel' 'mangga' 'anggur') 68 | buah[3]="semangka" 69 | buah[0]="pir" 70 | unset buah[1] 71 | echo "Nama Buahnya adalah : ${buah[@]}" 72 | echo "Nama Buah Index 0 : ${buah[0]}" 73 | echo "Panjang Array : ${#buah[@]}" 74 | echo "Index Setiap Buah : ${!buah[@]}" 75 | 76 | # Output: 77 | # Nama Buahnya adalah : pir anggur semangka 78 | # Nama Buah Index 0 : pir 79 | # Panjang Array : 3 80 | # Index Setiap Buah : 0 2 3 81 | ``` 82 | 83 | # Slice 84 | Slice ialah metode dimana memotong array dari index berapapun. Maksudnya bagaimana? contohnya kita ingin data arra yang ditampilkan itu tidak dari awal namun dari data ke 5 sampai 7 semisalnya, nah metode yang kita gunakan itu bernama slice. Oke kita ambil contohnya seperti ini 85 | 86 | ```bash 87 | arr=("apel" "mangga" "rambutan" "semangka" "melon") 88 | echo "${arr[@]}" 89 | 90 | # Ouput : apel mangga rambutan semangka melon 91 | ``` 92 | Nah bagaimana untuk mengambil datanya, oke kita liat table berikut ini 93 | 94 | 95 | | Symbol | Deskripsi | 96 | |:-----------: |:-------------------------------------------------------------: | 97 | | `[@]:i` | Mengambil data dari `i` awal sampai akhir | 98 | | `[@]:i:x` | Mengambil data awal `i` sampai data akhir yang ditentukan `x` | 99 | | `[@]:-i` | Mengambil data awal `-i` dari belakang | 100 | | `[@]:-i:x` | Mengambil data awal `-i` dari belakang sampai data akhir `x` | 101 | 102 | Dari diatas semisalnya kita ingin mengambil data rambutan sampai dengan melon, bisa dilakukan dengan slice dengan cara seperti ini 103 | 104 | ```bash 105 | arr=("apel" "mangga" "rambutan" "semangka" "melon") 106 | echo "${arr[@]:2}" 107 | 108 | # Output : rambutan, semangka, melon 109 | ``` 110 | Lalu bagaimana dengan kita yang ingin mengambil data array dari `-i` , apakah itu sama? Berbeda dengan yang tadi data awal dihitung `0`, namun ketika kita mengambil dari belakang awalan berubah menjadi `-1` jadi ketika kita mengambil data dari belakang , contohnya `-3` maka hasilnya akan seperti ini 111 | 112 | ```bash 113 | arr=("apel" "mangga" "rambutan" "semangka" "melon") 114 | echo "${arr[@]: -3}" 115 | 116 | # Output : rambutan, semangka, melon 117 | ``` 118 | Sama saja dengan contoh pertama namun data yang diambil dari belakang. Semisalnya kita ingin mengambil data dari `-3: -2` apakah bisa? Tidak bisa , jika dilakukan seperti itu akan terjadi error seperti ini 119 | 120 | ```bash 121 | arr=("apel" "mangga" "rambutan" "semangka" "melon") 122 | echo "${arr[@]: -3: -2}" 123 | 124 | # Output : line 2: -4: substring expression < 0 125 | ``` 126 | Jadi ketika kita membuat slice index akhir tidak boleh kurang dari 0, nilainya harus angka positif 127 | 128 | > Note: Uniknya untuk array kita bebas ingin menambahkan index ke berapa 129 | -------------------------------------------------------------------------------- /basic/08_array/array1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | buah=('apel' 'mangga' 'anggur') 4 | echo "Nama Buahnya adalah : ${buah[@]}" 5 | echo "Nama Buah Index 0 : ${buah[0]}" 6 | echo "Panjang Array : ${#buah[@]}" 7 | echo "Index Setiap Buah : ${!buah[@]}" 8 | -------------------------------------------------------------------------------- /basic/08_array/array2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | buah=('apel' 'mangga' 'anggur') 4 | buah[3]="semangka" 5 | buah[0]="pir" 6 | echo "Nama Buahnya adalah : ${buah[@]}" 7 | echo "Nama Buah Index 0 : ${buah[0]}" 8 | echo "Panjang Array : ${#buah[@]}" 9 | echo "Index Setiap Buah : ${!buah[@]}" 10 | -------------------------------------------------------------------------------- /basic/08_array/array3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | buah=('apel' 'mangga' 'anggur') 4 | buah[3]="semangka" 5 | buah[0]="pir" 6 | unset buah[1] 7 | echo "Nama Buahnya adalah : ${buah[@]}" 8 | echo "Nama Buah Index 0 : ${buah[0]}" 9 | echo "Panjang Array : ${#buah[@]}" 10 | echo "Index Setiap Buah : ${!buah[@]}" 11 | -------------------------------------------------------------------------------- /basic/08_array/array4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | buah=('apel' 'mangga' 'anggur') 4 | echo "${buah[@]: 2}" 5 | echo "${buah[@]: -2}" 6 | -------------------------------------------------------------------------------- /basic/09_loops/README.md: -------------------------------------------------------------------------------- 1 | Apa itu Loop? 2 | ============ 3 | Loop atau biasa disebutkan dengan perulangan ialah dimana sebuah metode yang akan melakukan perulangan hingga datanya itu bernilai `True`. Didalam loop shell scripting itu terdapat beberapa jenis 4 | 5 | ``` 6 | a. For Loop => Ialah control flow untuk menentukan iterasi, yang memungkinkan kode dieksekusi berulang kali. 7 | b. While Loop => Melakukan perulangan selagi data bernilai true 8 | c. Until Loop => Melakukan perulangan yang mengikuti dari CommandEnd nya 9 | ``` 10 | Oke mari kita bahas satu satu , apa itu `for loop`, `while loop`, dan `until loop` 11 | 12 | For Loop 13 | ======= 14 | For loop ialah sebuah perulangan yang telah dilakukan iterasi dimana didalamnya telah dikasih kondisi sebanyak melakukannya perulangan. For loop salah satu perulangan yang mudah dibaca alurnya ketimbang perulangan yang lainnya. 15 | 16 | Oke terus bagaimana `struktur` dari `for loop`, strukturnya itu mudah seperti ini 17 | 18 | ```bash 19 | for VARIABEL in CONDITION 20 | do 21 | COMMAND1 22 | COMMAND2 23 | done 24 | ``` 25 | Lalu bagaimana contonya ? oke kita akan dari yang mudah terlebih dahulu 26 | 27 | ```bash 28 | for i in 1 2 3 4 5 29 | do 30 | echo "Result is : $i" 31 | done 32 | ``` 33 | Salah satu contohnya seperti diatas, namun itu kurang efisiensi, coba kita berpikir lebih jauh semisalnya kita ingin menampilkan data lebih dari 100 bagaimana? apakah dengan sepeerti itu? sudah tentu tidak kita menggunakan format `{START..END}` seperti apa tuh, contohnya 34 | 35 | ```bash 36 | for i in {1..5} 37 | do 38 | echo "Result is : $i" 39 | done 40 | ``` 41 | Ada lagi semisalnya kita ingin bahwa angka `START` dinaikan dengan angka yang kita tentukan, bagaimana caranya? dengan menggunakan `{START..END..INCREMENT}` dimana setiap angka akan ditambahkan dengan angka `INCREMENT` dan akan berakhir sesuai nilai `END` contohnya 42 | 43 | ```bash 44 | for i in {0..5..2} 45 | do 46 | echo "$i" 47 | done 48 | 49 | Output 50 | 2 51 | 4 52 | ``` 53 | Nah diatas contoh menggunakan angka. Nah uniknya di for loop ini kita bisa melakukan berupa data `file`, ataupun data `array`, mari kita contoh dengan data `array` 54 | 55 | ```bash 56 | buah=('apel' 'anggur' 'pir') 57 | for i in ${buah[@]} 58 | do 59 | echo "$i" 60 | done 61 | 62 | Output: 63 | apel 64 | anggur 65 | pir 66 | ``` 67 | 68 | Until Loop 69 | ========== 70 | Until looop ialah sebuah perulangan dimana akan kondisinya ini keterbalikan dari si `while loop`. Loh maksudnya gimana nih? Maksudnya gini di `while loop` itu kita harus mencari cara bagaimana caranya akan menghasilkan angka yang ditentukan untuk berhentinya `loop` 71 | 72 | Nah `until loop` ini dimana dia akan berhenti bedasarkan kondisinya itu kurang dari hasil si datanya. Semisalnya begini kita ingin print angka `1-15`, dengan until loop. Nah kondisi yang dipakai itu `$var > 15` bukanlah `$var <= 15`. Loh heh, ko begitu ? menarik bukan, mari kita bahas strukturnya 73 | 74 | ```bash 75 | until (( conditions )) 76 | do 77 | command1 78 | command2 79 | ... 80 | .... 81 | commandEnd 82 | done 83 | ``` 84 | Jadi untuk loopingnya berhenti itu ada didalam `CommandEnd` dimana semisalnya kita ingin membuat angka `1-15` maka harus `var++` supaya loopnya berhenti jika tidak maka akan terjadi infinite loop 85 | 86 | ```bash 87 | num=1 88 | until (( $num > 15 )) 89 | do 90 | echo "Result Is : $num" 91 | (( num++ )) 92 | done 93 | ``` 94 | 95 | While Loop 96 | ========== 97 | While loop ialah sebuah perulangan yang dimana akan terus melakukannya selagi bernilai true. Lalu strukturnya bagaimana? Strukturnya itu mudah banget, seperti ini 98 | 99 | ```bash 100 | while (( conditions )) 101 | do 102 | command1 103 | command2 104 | command3 105 | done 106 | ``` 107 | 108 | Nah lalu bagaimana contohnya?, oke mari kita buat sebuah keadaan sederhana dimana si `num` defaultnya adalah `1`, disini kita ingin menampilkan setiap angka dari si `num` dengan syarat hanya sampai angka `15` saja, bagaimana progamnya?. Sperti ini 109 | 110 | ```bash 111 | num=1 112 | 113 | while (( $num <= 15)) 114 | do 115 | echo "Index Of $num" 116 | (( num++ )) 117 | done 118 | ``` 119 | Maka outputnya itu `Index Of : num` sampai num sama dengan `15` maka akan berhenti looping. Oya alasan ditambahkan `num++` agar nilainya bertambah jika tidak maka akan menjadi `infinite loop` 120 | 121 | -------------------------------------------------------------------------------- /basic/09_loops/for-loop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for i in {0..5..2} 3 | do 4 | echo "$i" 5 | don 6 | -------------------------------------------------------------------------------- /basic/09_loops/until-loop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | num=1 3 | until (( $num > 15 )) 4 | do 5 | echo "Result Is : $num" 6 | (( num++ )) 7 | done 8 | -------------------------------------------------------------------------------- /basic/09_loops/while-loop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | num=1 4 | 5 | while (( $num <= 15)) 6 | do 7 | echo "Index Of $num" 8 | (( num++ )) 9 | done 10 | -------------------------------------------------------------------------------- /basic/10_break_and_continue/README.md: -------------------------------------------------------------------------------- 1 | Break 2 | ===== 3 | Break adalah sebuah method yang dimana ketika kondisi telah memenuhi syarat maka akan berhenti, kondisi ini biasanya dipakai dalam perulangan ataupun `instruksi logika`. Lalu kenapa si break ini penting kita ambil contoh aja `loop`, disini kita ingin menampikan data yang kita inginkan saja dan data yang tidak penting maka tidak ditampilkan, contohnya seperti ini 4 | 5 | ```bash 6 | for (( num=1; num<=15; num++ )) 7 | do 8 | if (( $num > 7 )) 9 | then 10 | break 11 | fi 12 | echo $num 13 | done 14 | ``` 15 | 16 | Dimana hasil outputnya ialah `1,2,3,4,5,6,7`, nah disini kita tahu bahwa angka yang lebih 7 itu tidak ditampilkan dan akan lanjut ke statement berikutnya. Oke next kita bahas `continue` 17 | 18 | Continue 19 | ======== 20 | Continue adalah sebuah method yang dimana ketika kondisi telah memenuhi syarat maka akan `lanjut` ke statement berikutnya. Loh heh, apa bedanya dengan break? Jadi gini si break kan akan melakukan berhenti ketika angkanya memang memenuhi syarat contohnya kaya contoh diatas 15 emang lebih dari 7. Dan akhirnya break terjadi. Oke kita ambil contoh seperti ini 21 | 22 | ```bash 23 | for (( num=1; num<=15; num++ )) 24 | do 25 | if (( $num < 7 )) 26 | then 27 | break 28 | fi 29 | echo $num 30 | done 31 | ``` 32 | 33 | Maka akan yang terjadi tidak menampilkan output apa apa, loh heh kenapa? karena dikondisi mengatakan bahwa angka yang kurang dari 7 akan `break` yo sudah jelas dari awal sudah terpenuhi dan pasti akan ke `break`. Nah lalu bagaimana dengan `continue` kita samakan seperti diatas, tapi methodnya kita ubah ke `continue` 34 | 35 | ```bash 36 | for (( num=1; num<=15; num++ )) 37 | do 38 | if (( $num < 7 )) 39 | then 40 | continue 41 | fi 42 | echo $num 43 | done 44 | ``` 45 | Nah berbeda di atas , kondisi terpenuhi maka angka yang dibawah 7 tidak ditampilkan melainkan angka yang di atas 7 lah yang ditampilkan 46 | -------------------------------------------------------------------------------- /basic/10_break_and_continue/break.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for (( num=1; num<=15; num++ )) 4 | do 5 | if (( $num > 7 )) 6 | then 7 | break 8 | fi 9 | echo $num 10 | done 11 | -------------------------------------------------------------------------------- /basic/10_break_and_continue/continue.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for (( i=0; i<=15; i++)) 4 | do 5 | if (( $i < 7 )) 6 | then 7 | continue 8 | fi 9 | echo "$i" 10 | done 11 | -------------------------------------------------------------------------------- /basic/11_functions/README.md: -------------------------------------------------------------------------------- 1 | # Functions 2 | Functions adalah merupakan sebuah metode dimana script kode kita disimpan di dalamnya dan bisa kita ambil sebanyak yang kita inginkan. Oke lalu bagaimana dengan struktur dari `function` di `shell scripting`, nah seperti inilah strukturnya : 3 | 4 | ```bash 5 | function name(){ 6 | Command 7 | } 8 | ``` 9 | Oke disini nama function itu ditandai dengan `name` nah bukti bahwa itu function ditandai dengan kata `function`, nah ada yang unik dari si `shell scripting` dimana ketika kita membuat function kita bisa lakukan tanpa kata `function` di dalam script sehingga kita bisa langsung membuat namanya, contohnya seperti ini 10 | 11 | ```bash 12 | nama(){ 13 | Command 14 | } 15 | ``` 16 | Loh heh, semudah itukah? enak banget dong, ya itulah enaknya `shell scripting` dimana kita bisa melakukan sesimple mungkin, lalu bagaimana dengan contohnya? oke kita ambil contoh simpel aja yang pertama itu tentang penentuan `nilai lebih besar` dengan struktur yang pertama , kedua kita buat contoh tentang `bilangan genap` dengan struktur yang kedua, oke kita buat contoh pertama 17 | 18 | ```bash 19 | function isGt(){ 20 | echo -e "Masukan Angka Pertama: \c" 21 | read angka1 22 | 23 | echo -e "Masukan Angka Kedua: \c" 24 | read angka2 25 | if [[ $angka1 -gt $angka2 ]] 26 | then 27 | echo "Angka Terbesar : $angka1" 28 | else 29 | echo "Angka Terbesar : $angka2" 30 | fi 31 | } 32 | isGt 33 | ``` 34 | Oya saya lupa jelaskan untuk memanggil file kalian cukup tulis nama funtionnya saja contoh diatas namanya `isGt` maka cara manggil function cukup `isGt` saja, dan outputnya akan seperti ini 35 | 36 | ``` 37 | Masukan Angka Pertama: 10 38 | Masukan Angka Kedua: 20 39 | Angka Terbesar : 20 40 | ``` 41 | 42 | Next kita buat untuk yang kedua dimana kita membuat dengan looping dan mencari `angka genap` dengan struktur seperti contoh `kedua` 43 | 44 | ```bash 45 | genap(){ 46 | for i in {1..50} 47 | do 48 | if (( $i%2 == 0 )) 49 | then 50 | echo "Ini adalah Genap : $i" 51 | else 52 | echo "" 53 | fi 54 | done 55 | } 56 | genap 57 | ``` 58 | 59 | # Function Variabel 60 | Function variabel ialah sebuah functions yang diikuti dengan variabel. Contoh seperti ini `function ganjil` memiliki variabel `isNum` dan dia mengikuti dari function yang ada di `ganjil`. Bagaimana si bang? sepertinya ribet banget, contohnya strukturnya seperti ini 61 | 62 | ```bash 63 | variabel=2 64 | function name(){ 65 | Command 66 | } 67 | name 68 | ``` 69 | Nah seperti diataslah contohnya dimana si function akan mengambil variabel diatasnya dan dapat mengolah data tersebut didalam functions 70 | ```bash 71 | isNum=50 72 | function ganjil(){ 73 | for (( i=0; i<=isNum; i++)) 74 | do 75 | if (( $i%2 != 0 )) 76 | then 77 | echo "Angka Ganjil : $i" 78 | else 79 | echo 80 | fi 81 | done 82 | } 83 | ganjil 84 | ``` 85 | 86 | # Function Pass Parameter 87 | Oke, `function pass parameter` ialah merupakan metode function yang diikuti oleh argumen yang kita inginkan, biasanya ketika tidak diikuti argumen function ini akan menjadi error. Lalu bagaimana `function pass parameter` di shell scripting. Oke sebelum berlanjut, sedikit informasi aja sebenarnya metode ini tidak terlalu berguna ketika di production karena `shell scripting` sendiri berfungsi untuk membuild sebuah sistem melalui command yang ada 88 | 89 | ```bash 90 | function isFunctionPassParameter(){ 91 | echo "Hello $1" 92 | } 93 | isFunctionPassParameter "Kiyo" 94 | ``` 95 | Pertanyaanya, apakah bisa dijalankan dengan dua parameter atau lebih ?. Bisa saja kalian tinggal tambahkan `$2 $3` dan seterusnya sebanyak parameter yang kalian inginkan, contohnya seperti ini 96 | 97 | ```bash 98 | function isMoreFunctionPassParameter(){ 99 | echo "Namaku $1 $2" 100 | } 101 | isMoreFunctionPassParameter "Ahmad" "Subarjo" 102 | ``` 103 | 104 | # Function Return Value 105 | Oke sama dibahasa pemograman lainnya, di shell scripting terdapat `return` value juga, dimana fungsinya juga sama untuk mengembalikan data yang ada. Namun di shell scripting cara memanggilnya itu unik dengan menggunakan `$?`, tetapi secara fungsional tetap saja return value ini sama dengan pass parameter dimana jarang ada yang memakainya. Oke untuk contoh return value di function seperti ini 106 | 107 | ```bash 108 | function isReturnValue(){ 109 | echo "Hello World" 110 | return 55 111 | } 112 | isReturnValue 113 | res:$? 114 | echo $res 115 | ``` 116 | Uniknya di shell scripting ini untuk return value harus berupa numeric / angka maka akan error dan menghasilkan pesan `return: Kiyo: numeric argument required` ketika di running. Oke mungkin untuk return seperti ini aja, next kita bahas `function recursive` 117 | 118 | # Function Recursive 119 | Oke sebelum membahas ke pokok materi kita bahas dulu apa si yang dimaksud dengan `recursive`. Recursive ialah sebuah metode dimana memanggil sebuah progam ke progam lainnya dengan cara memanggil diri sendiri. Nah sama dengan materi `function recursive` kali ini dimana terdapat dua function yang salah satu functionnya memanggil function lain, lalu memanggil function itu sendiri. Piye si, kok ruwet banget, oke kita kasih contoh flownya seperti ini 120 | 121 | ```bash 122 | function isFunction1(){ 123 | echo "Hello World" 124 | isFunction2 "Kiyo" 125 | } 126 | function isFunction2{ 127 | echo "Hay my name is $1" 128 | } 129 | isFunction1 130 | ``` 131 | Menarik bukan disini `isFunction1` menyimpan `isFunction2` dan ketika di running manggilnya `isFunction1` maka hasilnya dari `isFunction1` dan `isFunction2`, oke coba kita buat progam pengecekan prime number dimana function dua berperan untuk inputanya 132 | 133 | ```bash 134 | function isResult(){ 135 | isPrime 136 | value=`factor $isNumber | wc -w` 137 | if [[ $value -eq 2 ]] 138 | then 139 | echo "$isNumber bilangan prima" 140 | else 141 | echo "$isNumber bukan bilangan prima" 142 | fi 143 | } 144 | function isPrime(){ 145 | echo -e "Enter Number : \c" 146 | read isNumber 147 | } 148 | isResult 149 | ``` 150 | Oke mungkin untuk materi `recursive function` sampai disini saja next kita bahas apa itu `local variables` 151 | 152 | # Local Variables 153 | Local Variables adalah sebuah metode dimana variabel ini hanya bisa diakses oleh lokal saja atau dalam function saja, contohnya semisalnya kita memiliki nama function `isName` nah di `isName` ini terdapat sebuah variabel `name` yang dibuat `lokal` sehingga yang bisa akses ini adalah function saja. Oke lalu bagaimana contoh dari yang bukan lokal bang, begini contohnya 154 | 155 | ```bash 156 | function isName(){ 157 | name=$1 158 | echo "My Name : $name" 159 | } 160 | name="Dias" 161 | echo "My Name : $name => Before" 162 | isName Kiyo 163 | echo "My Name : $name => After" 164 | ``` 165 | 166 | Maka output yang before itu adalah `Dias`, lalu print `Kiyo`, dan yang after itu juga `Kiyo` 167 | 168 | ``` 169 | My Name : Dias => Before 170 | My Name : Kiyo 171 | My Name : Kiyo => After 172 | ``` 173 | 174 | Oke lalu contoh lokal nya itu bisa ditandai dengan kata `local` sebelum variabelnya, contoh seperti ini 175 | 176 | ```bash 177 | function isName(){ 178 | local name=$1 179 | echo "My Name : $name" 180 | } 181 | name="Dias" 182 | echo "My Name : $name => Before" 183 | isName Kiyo 184 | echo "My Name : $name => After" 185 | ``` 186 | 187 | Maka output yang before itu adalah `Dias`, lalu print `Kiyo`, dan yang after itu juga `Dias`. Kenapa bisa begitu mas? ya karena si variabel name telah di setting `local` yang dimana hanya bisa diakses dengan function saja 188 | 189 | ``` 190 | My Name : Dias => Before 191 | My Name : Kiyo 192 | My Name : Dias => After 193 | ``` 194 | -------------------------------------------------------------------------------- /basic/11_functions/function-pass-parameter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function isMoreFunctionPassParameter(){ 3 | echo "Namaku $1 $2" 4 | } 5 | isMoreFunctionPassParameter "Ahmad" "Subarjo" 6 | -------------------------------------------------------------------------------- /basic/11_functions/function-recursive.sh: -------------------------------------------------------------------------------- 1 | function isResult(){ 2 | isPrime 3 | value=`factor $isNumber | wc -w` 4 | if [[ $value -eq 2 ]] 5 | then 6 | echo "$isNumber bilangan prima" 7 | else 8 | echo "$isNumber bukan bilangan prima" 9 | fi 10 | } 11 | function isPrime(){ 12 | echo -e "Enter Number : \c" 13 | read isNumber 14 | } 15 | isResult 16 | -------------------------------------------------------------------------------- /basic/11_functions/function-return.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function isReturnValue(){ 3 | echo "Hello World" 4 | return 55 5 | } 6 | isReturnValue 7 | res=$? 8 | echo $res 9 | -------------------------------------------------------------------------------- /basic/11_functions/function1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function isGt(){ 4 | echo -e "Masukan Angka Pertama: \c" 5 | read angka1 6 | 7 | echo -e "Masukan Angka Kedua: \c" 8 | read angka2 9 | 10 | if [[ $angka1 -gt $angka2 ]] 11 | then 12 | echo "Angka Terbesar : $angka1" 13 | else 14 | echo "Angka Terbesar : $angka2" 15 | fi 16 | } 17 | 18 | isGt 19 | -------------------------------------------------------------------------------- /basic/11_functions/function2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | genap(){ 4 | for i in {1..50} 5 | do 6 | if (( $i%2 == 0 )) 7 | then 8 | echo "Ini adalah Genap : $i" 9 | else 10 | echo "" 11 | fi 12 | done 13 | } 14 | 15 | genap 16 | -------------------------------------------------------------------------------- /basic/11_functions/function3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | isNum=50 4 | function ganjil(){ 5 | for (( i=0; i<=isNum; i++)) 6 | do 7 | if (( $i%2 != 0 )) 8 | then 9 | echo "Angka Ganjil : $i" 10 | else 11 | echo 12 | fi 13 | done 14 | } 15 | 16 | ganjil 17 | -------------------------------------------------------------------------------- /basic/11_functions/local_variabel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function isName(){ 4 | local name=$1 5 | echo "My Name : $name" 6 | } 7 | name="Dias" 8 | echo "My Name : $name => Before" 9 | isName Kiyo 10 | echo "My Name : $name => After" 11 | -------------------------------------------------------------------------------- /basic/12_environment_variables/README.md: -------------------------------------------------------------------------------- 1 | # Environment Variables 2 | 3 | ## Pengertian 4 | 5 | Environment variables adalah variabel yang tersimpan di _environment_ shell dan menyimpan data mengenai environment / OS yang digunakan. 6 | 7 | ## Contoh 8 | 9 | Beberapa contoh environment variables yang umum digunakan: 10 | 11 | | Variabel | Deskripsi | 12 | |-------------|------------------------------------------------------------| 13 | | `$HOME` | Lokasi direktori /home dari user | 14 | | `$PREFIX` | Path ke direktori /usr | 15 | | `$PATH` | Kumpulan path untuk mencari lokasi package yang dijalankan | 16 | | `$PWD` | Lokasi direktori yang ditempati | 17 | | `$SHELL` | Lokasi shell yang digunakan | 18 | 19 | ## Mendapatkan Daftar Environment Variables Yang Ada 20 | 21 | Untuk melihat Environment Variables yang ada, ketikkan `printenv` di Terminal. 22 | 23 | Sebagai contoh, di Ubuntu melalui WSL (Windows Subsystem for Linux) 2: 24 | 25 | ```bash 26 | anakmamak@CoolLaptop:~$ printenv 27 | 28 | SHELL=/bin/bash 29 | WSL_DISTRO_NAME=Ubuntu-20.04 30 | GPG_TTY=/dev/pts/0 31 | NAME=CoolLaptop 32 | PWD=/home/anakmamak 33 | LOGNAME=anakmamak 34 | HOME=/home/anakmamak 35 | LANG=C.UTF-8 36 | WSL_INTEROP=/run/WSL/258_interop 37 | LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: 38 | LESSCLOSE=/usr/bin/lesspipe %s %s 39 | TERM=xterm-256color 40 | LESSOPEN=| /usr/bin/lesspipe %s 41 | USER=anakmamak 42 | SHLVL=0 43 | WSLENV= 44 | XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop 45 | PATH=/home/anakmamak/.local/bin:/home/anakmamak/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Users/hendr/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/hendr/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin 46 | HOSTTYPE=x86_64 47 | _=/usr/bin/printenv 48 | ``` 49 | 50 | Dapat dilihat, environment variables yang ada di Ubuntu melalui WSL 2 sangat banyak, beberapa juga berhubungan dengan sistem. 51 | 52 | > Environment Variables pada tiap sistem berbeda-beda! 53 | 54 | ## Environment Variables Sistem 55 | 56 | Environment Variables sistem adalah environment variables yang tersedia secara bawaan dari OS yang digunakan. Seperti `$HOSTNAME`, `$USER`, `$UID`, dan lain-lain. 57 | 58 | Variabel-variabel ini tidak ada di `printenv`, melainkan dari file sistem, seperti: `$HOSTNAME => /etc/hostname`. Beberapa variabel terdapat pada file sistem yang tersembunyi. 59 | 60 | ## Menambahkan Environment Variables 61 | 62 | kamu dapat menambahkan environment variables kamu sendiri sehingga dapat diakses oleh semua proses dalam satu shell. Jalankan perintah: 63 | 64 | ```bash 65 | anakmamak@CoolLaptop:~$ export namaVariabel=isiVariabel 66 | ``` 67 | 68 | untuk menambah environment variable, dimana `namaVariabel` merupakan nama dari variabel dan `isiVariabeel` adalah isi/value dari variabel. `export` merupakan perintah yang digunakan untuk mengekspor variabel ke dalam environment variables. 69 | 70 | Perlu diketahui bahwa environment variable yang kamu tambahkan hanya bersifat sementara dan hanya dapat diakses oleh shell yang digunakan. Jika kamu menggunakan shell lain atau membuka ulang shell, maka variabel tersebut akan terhapus/tidak ditemukan. 71 | 72 | 73 | -------------------------------------------------------------------------------- /basic/12_environment_variables/environment_variables.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Environment Variables 3 | # Program sederhana untuk menampilkan beberapa environment variables. 4 | 5 | echo "You are '$USER'," 6 | echo "Your System Hostname: '$HOSTNAME'," 7 | echo "Current Directory: '$PWD'," 8 | # echo "Your system $PATH: '$PATH'." 9 | -------------------------------------------------------------------------------- /basic/13_operation_file_dan_folder/README.md: -------------------------------------------------------------------------------- 1 | # Operation File 2 | Oke sebentar yang dimaksud dengan operation file itu bagaimana?, pertanyaan yang bagus mari kita bahas tuntas. Operasi file yang dimaksud ialah dimana kita akan membaca file, dan membuktikan adanya sebuah file dengan shell scripting. Nah lalu bagaimana untuk mengambil file dari luar, bisa dilakukan dengan `$1`, jadi akan seperti ini 3 | 4 | ```bash 5 | variabel=$1 6 | cat $variabel 7 | ``` 8 | Oke cat itu apa ? apakah itu kucing?. Bukan bree, beda cerita `cat` yang dimaksud disini ialah command dasar linux yang digunakan untuk membaca isi `file`. Oke mungkin penjelasan detail `cat` akan dibahas di `usefull_command` yang penting kita sudah tau bahwa `cat` itu untuk membaca file. Next bagaimana caranya kita tahu bahwa file itu ada ?. Hal ini bisa dilakukan dengan `-f`, bagaimana tuh? seperti ini 9 | 10 | ```bash 11 | echo -e "Enter your file : \c" 12 | read variabel 13 | 14 | if [[ -f $variabel ]] 15 | then 16 | echo "File Found" 17 | else 18 | echo "Not Found" 19 | fi 20 | ``` 21 | Oke untuk file kita udah tau nih caranya bagaimana, lalu bagaimana dengan folder? mari kita bahas 22 | 23 | # Operation Folder 24 | Operation folder dimana kita memanggil folder dari komputer kita. Sebelum itu mari kita bahas, apa itu `mkdir`?. Oke `mkdir` ialah command linux yang digunakan untuk membuat sebuah folder. Untuk penjelasan lebih detail kita akan bahas di `usefull_command` yang penting kita tau bahwa `mkdir` command untuk buat folder. 25 | 26 | ```bash 27 | variabel=$1 28 | mkdir $variabel 29 | ``` 30 | 31 | Lalu bagaimana cara check bahwa directory sudah ada ? dengan `-d` dimaan fungsinya ini untuk mengecheck adakah directory yang kita masukan, untuk contoh progamnya seperti ini 32 | 33 | ```bash 34 | echo -e "Enter Directory : \c" 35 | read folder_name 36 | 37 | if [[ -d $folder_name ]] 38 | then 39 | echo "Folder Found" 40 | else 41 | echo "Folder Not Found" 42 | fi 43 | ``` 44 | Jadi logicnya ketika folder itu ada, maka menghasilkan output `Folder Found` dan jika tidak outputnya adalah `Folder Not Found` 45 | -------------------------------------------------------------------------------- /basic/13_operation_file_dan_folder/operation_file.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "Enter Your File : \c" 4 | read file_name 5 | 6 | if [[ -f $file_name ]] 7 | then 8 | echo "File Found" 9 | else 10 | echo "File Not Found" 11 | fi 12 | -------------------------------------------------------------------------------- /basic/13_operation_file_dan_folder/operation_folder.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "Enter Your Folder : \c" 4 | read folder_name 5 | 6 | if [[ -d $folder_name ]] 7 | then 8 | echo "Folder Found" 9 | else 10 | echo "Folder Not Found" 11 | fi 12 | -------------------------------------------------------------------------------- /basic/14_permission_file/README.md: -------------------------------------------------------------------------------- 1 | # Permission File 2 | Oke masih mengenai tentang file, sebelum itu apa si yang dimaksud dengan `permission file ?`. Permission file ialah metode dimana untuk mengelola hak akses dari sebuah file. Untuk mengubah permission file itu sendiri dengan command `chmod`, contoh yang kita lakukan pada pembelajaran hari ini kita sering melakukan `chmod 777`. Lalu yang dimaksud angka `777`? Apakah kode rahasia? Atau apa?, Sebelum itu kita pernah menemukan hal seperti ini ketika melihat isi directory 3 | 4 | ``` 5 | kiyo@alphacentauri:~/Git/Shell# ls -la 6 | 7 | drwxr-xr-x 5 kiyo kiyo 4096 Jan 28 13:48 advance 8 | -rwxr-xr-x 1 kiyo kiyo 70 Jan 25 09:06 test.sh 9 | ``` 10 | 11 | Mungkin kita awali dengan stepnya , maksudnya step itu bagaimana? Mungkin bisa disebut user, permission file juga melibatkan beberapa user dalam melakukannya, kita ambil contoh file `test.sh` 12 | 13 | | Symbol | Deskripsi | 14 | |:---------: |:--------------------------------------: | 15 | | `-rwx` | Oke ini untuk permission untuk user | 16 | | `r-x` | Ini permission untuk group | 17 | | `r-x` | Ini permission untuk other | 18 | 19 | 20 | Loh heh penjelasanya bagaimana? untuk penjelasana apa itu `-rwx, r-x` kalian bisa melihat penjelasan dibawah ini, kalian bisa mengetahui apa yang dimaksud `-rwx, r-x` dan `chmod` apa yang digunakan 21 | 22 | | Symbol | Deskripsi | 23 | |:--------: |:------------------------------------------------------------: | 24 | | `r` | Akses yang digunakan untuk membaca saja | 25 | | `w` | Diberi akses untuk mengubah isi file | 26 | | `x` | Permission untuk meng-eksekusi file | 27 | | `-` | Tidak mendapatkan akses apapun | 28 | | `d` | Tipenya merupakan folder / directory | 29 | 30 | Dari tabel diatas menjelaskan bahwa setiap permission yang kita lakukan memiliki alur yang berbeda, ada yang memberikan akses keseluruhan dan ada juga yang hanya membaca saja. Lalu bagaimana kita mengetahuinya, bahwa akses itu hanya digunakan untuk membaca saja. Oke lihat tabel berikut ini 31 | 32 | | Nomor | Permission Type | Symbol | 33 | |:-------------:|:-----------------------------:|:---------------------:| 34 | | `0` | No Permission | `-` | 35 | | `1` | Execute | `-x` | 36 | | `2` | Write | `-w` | 37 | | `3` | Execute + Write | `-wx` | 38 | | `4` | Read | `r-` | 39 | | `5` | Read + Execute | `r-x` | 40 | | `6` | Read + Write | `rw-` | 41 | | `7` | Read + Write + Execute | `rwx` | 42 | 43 | Dari sini kita tahu bahwa setiap `file` yang di permission `chmod 777` maka akan mendapatkan kesluruhan akses , baik membaca, write, dan execute. Oke lalu bagaimana dengan yang `chmod +x`, `chown`, dan sebagainya. Next kita bahas di folder lainnya. 44 | 45 | ## Contoh Progam 46 | Oke kita sudah tahu bahwa setiap file memiliki permission dan alur yang berbeda, nah kali ini kita akan mencoba membuat sebuah progam dengan shell scripting dimana progam ini akan chmod sebuah file yang kita input / panggil. Bagaimana kah itu?, oke disini mungkin sekalian mereview materi basic kembali, progam yang kita pakai ada bberapa metode, mulai dari `Function + Input User + If Statement + Pemanggilan File`. Oya untuk chmodnya kita gunakan sesuai dengan inputan user, seperti inilah contohnya 47 | 48 | ```bash 49 | #!/bin/bash 50 | 51 | permission_file(){ 52 | echo -e "Masukan File : \c" 53 | read file_name 54 | 55 | if [[ -f $file_name ]] 56 | then 57 | echo "Permission (ex. 777): " 58 | read permissions 59 | chmod $permissions $file_name 60 | else 61 | echo "Not Found" 62 | fi 63 | } 64 | 65 | permission_file 66 | ``` 67 | -------------------------------------------------------------------------------- /basic/14_permission_file/permission.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | permission_file(){ 4 | echo -e "Masukan File : \c" 5 | read file_name 6 | 7 | if [[ -f $file_name ]] 8 | then 9 | echo "Permission (ex. 777): " 10 | read permissions 11 | chmod $permissions $file_name 12 | else 13 | echo "Not Found" 14 | fi 15 | } 16 | 17 | permission_file 18 | -------------------------------------------------------------------------------- /basic/14_permission_file/test-permission.txt: -------------------------------------------------------------------------------- 1 | Hello World 2 | -------------------------------------------------------------------------------- /basic/15_shebang/README.md: -------------------------------------------------------------------------------- 1 | # Shebang 2 | Shebang itu apasih? Shebang adalah sebuah *statement* yang kita tentukan di baris pertama pada shell scripts kita. 3 | Fungsi-nya apa sih shebang ini? Nah di materi ini kita bakal cari tau kenapa shebang itu cukup penting dan apa fungsi-nya. 4 | 5 | Nah jadi apa fungsi shebang? Seperti yang saya bilang tadi, shebang adalah *statement* yang kita tentukan di barisan pertama pada shell scripts kita, 6 | fungsi-nya untuk menentukan shell apa yang akan digunakan untuk menjalankan script kita ini. 7 | 8 | Shebang akan menginstruksikan shell untuk menjalankan script yang di tentukan dengan shell tertentu.
9 | Contoh dibawah ini menunjukan untuk menjalankan script [for loop](https://github.com/bellshade/Shell/tree/main/basic/09_loops) dibawah dengan shell Bash (dengan asumsi bahwa bash telah di install di `/bin`). 10 | 11 | ```sh 12 | #!/bin/bash <- ini adalah shebang 13 | for count in {0..10}; do 14 | echo "Hitungan $count" 15 | done 16 | 17 | Output: 18 | Hitungan 0 19 | Hitungan 1 20 | Hitungan 2 21 | Hitungan 3 22 | dan seterus-nya 23 | ``` 24 | 25 | Jadi apakah shebang itu penting? Sangat penting, kenapa? saya akan beri contoh seperti di atas dengan shell yang berbeda yaitu [Debian Almquist Shell (dash)](https://wiki.archlinux.org/title/Dash) 26 | 27 | ```sh 28 | #!/bin/dash 29 | for count in {0..10}; do 30 | echo "Hitungan $count" 31 | done 32 | 33 | Output: 34 | Hitungan {0..10} 35 | ``` 36 | 37 | Loh, Kok bisa output-nya berbeda? karena dash tidak tahu cara-nya mengubah ekspansi `{0..10}` menjadi sebuah urutan angka. 38 | 39 | Tidak semua shell memiliki cara kerja dan syntax yang sama, 40 | itulah mengapa Shebang cukup penting untuk menunjukan shell apa yang akan digunakan untuk menjalankan script kita ini. 41 | 42 | Jika script mendeklarasikan dash pada shebang namun saya ingin menggunakan bash bagaimana?
43 | Kalian cukup menjalankan-nya dengan mengawali perintah bash. 44 | ```sh 45 | bash /path/ke/file.sh 46 | ``` 47 | 48 | Lalu jika kita tidak menentukan shell apa yang akan digunakan melalui shebang, apa yang akan terjadi? 49 | Jika begitu secara otomatis script akan menggunakan shebang `#!/bin/sh`. 50 | 51 | `#!/bin/sh` itu shell apa? itu hanyalah sebuah [symlink](https://en.wikipedia.org/wiki/Symbolic_link) ke shell tertentu, ini bergantung kepada sistem operasi apa yang digunakan karena 52 | pada kebanyakan distro linux symlink `sh` akan mengarahkan-nya kepada Bash, namun berbeda untuk [Debian](https://www.debian.org/intro/about) yang akan mengarahkan-nya kepada dash. 53 | 54 | Cara cek-nya gimana? kalian cukup menjalankan perintah `ls -l /bin/sh` di terminal kalian. perintah tersebut akan memberi tahu mengarah kemana symlink tersebut. 55 | ```bash 56 | $ ls -l /bin/sh 57 | /bin/sh -> bash # <- Output 58 | ``` 59 | 60 | Karena `sh` hanyalah symlink, maka dari itu sangatlah di rekomendasikan untuk menggunakan `#!/bin/bash` dari pada `#!/bin/sh` untuk menghindari error di shell script kalian. 61 | -------------------------------------------------------------------------------- /basic/15_shebang/test-shebang-bash.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for count in {0..10}; do 3 | echo "Hitungan $count" 4 | done 5 | 6 | -------------------------------------------------------------------------------- /basic/15_shebang/test-shebang-dash.sh: -------------------------------------------------------------------------------- 1 | #!/bin/dash 2 | for count in {0..10}; do 3 | echo "Hitungan $count" 4 | done 5 | 6 | -------------------------------------------------------------------------------- /basic/README.md: -------------------------------------------------------------------------------- 1 |

Basic Shell Scriptting

2 | 3 |
4 | 5 |
6 | 7 | 8 | 9 | `Script Shell` adalah program komputer yang dirancang oleh shell Unix/Linux yang dapat berupa salah satunya adalah: 10 | 11 | - [`Bourne Shell`](https://en.wikipedia.org/wiki/Bourne_shell) 12 | - [`C Shell`](https://en.wikipedia.org/wiki/C_Shell) 13 | - [`Korn Shell`](https://en.wikipedia.org/wiki/KornShell) 14 | - [`GNU bourne-again Shell`](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) 15 | 16 | Shell adalah penerjemah baris perintah dan operasi tipikal yang dilakukan oleh skrip shell termasuk manipulasi file, eksekusi program, dan pencetakan teks. 17 | 18 | Skrip shell memiliki beberapa konstruksi yang diperlakukan yang memberi tahu lingkungan shell apa yang harus dilakukan dan kapan melakukannya. tentu saja, sebagian besar skrip lebih kompleks. 19 | 20 | Bagaimanapun juga, shell adalah bahasa pemograman yang nyata, lengkap dengan variable, struktur kontrol, dan sebagainya. tidak perduli sberapa rumit sebuah skrip, itu masih hanya daftar perintah yang dieksekusi secara berurutan. 21 | 22 | Pada kesempatan kali ini kami dari Bellshade mengajak kalian yang ingin belajar mengenai `Shell Scripting` berbahasa Indonesia, bagi kalian yang ingin mempelajari `Shell Scripting` kalian bisa mengikuti urutan pembelajaran dari basic seperti berikut ini 23 | 24 | | No | Materi Basic | 25 | |:---:|:--------------------------------------------------------------------------------------------------------------------:| 26 | | 1 | [`Hello World`](https://github.com/bellshade/Shell/tree/main/basic/00_hello_world) | 27 | | 2 | [`Variabel`](https://github.com/bellshade/Shell/tree/main/basic/01_variabel) | 28 | | 3 | [`Variabel Special`](https://github.com/bellshade/Shell/tree/main/basic/02_variabel_spesial) | 29 | | 4 | [`Operator`](https://github.com/bellshade/Shell/tree/main/basic/03_operator) | 30 | | 5 | [`Perform Arimathic Operations`](https://github.com/bellshade/Shell/tree/main/basic/04_perform_arimathic_operations) | 31 | | 6 | [`BC Command`](https://github.com/bellshade/Shell/tree/main/basic/05_bc_command) | 32 | | 7 | [`Instruksi Logika`](https://github.com/bellshade/Shell/tree/main/basic/06_instruksi_logika) | 33 | | 8 | [`User Input`](https://github.com/bellshade/Shell/tree/main/basic/07_user_input) | 34 | | 9 | [`Array dan Slice`](https://github.com/bellshade/Shell/tree/main/basic/08_array) | 35 | | 10 | [`Loops`](https://github.com/bellshade/Shell/tree/main/basic/09_loops) | 36 | | 11 | [`Break dan Continue`](https://github.com/bellshade/Shell/tree/main/basic/10_break_and_continue) | 37 | | 12 | [`Functions`](https://github.com/bellshade/Shell/tree/main/basic/11_functions) | 38 | | 13 | [`Environment Variabels`](https://github.com/bellshade/Shell/tree/main/basic/12_environment_variables) | 39 | | 14 | [`Operation File dan Folder`](https://github.com/bellshade/Shell/tree/main/basic/13_operation_file_dan_folder) | 40 | | 15 | [`Permission File`](https://github.com/bellshade/Shell/tree/main/basic/14_permission_file) | 41 | | 16 | [`Materi Shebang `](https://github.com/bellshade/Shell/tree/main/basic/15_shebang) | 42 | 43 | 44 | 45 | 46 | 47 | # Getting Started 48 | 49 | - Windows 50 | 51 | Dari Windows menyarankan untuk mengaktifkan [**Windows Subsystem for Linux**](https://docs.microsoft.com/en-us/windows/wsl/) untuk menjalankan program shell. 52 | 53 | - Linux _atau_ Mac OS 54 | 55 | Kita tidak perlu mengaktifkan beberapa kebutuhan dan lain-lain karena shell ini dirancang untuk Linux dan Mac OS(Unix). 56 | 57 | > Note : running file `bash filename` 58 | -------------------------------------------------------------------------------- /playground/rata_rata.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rata() { 4 | # Membuat variabel yang basis array untuk input beberapa data 5 | arr=("$@") 6 | 7 | # Menghitung panjang array 8 | panjang=${#arr[@]} 9 | jumlah=0 10 | 11 | # Looping untuk menambahkan total semua angka yang berada di array 12 | for angka in "${arr[@]}"; do 13 | jumlah=$(bc -l <<< "$jumlah + $angka") 14 | done 15 | 16 | # Hasil dari penjumlahan dibagi dengan panjang array 17 | hasil=$(bc -l <<< "$jumlah / $panjang") 18 | echo $hasil 19 | } 20 | 21 | data=(2 2 3 4 6 6 2 3) 22 | rata "${data[@]}" 23 | -------------------------------------------------------------------------------- /simple_project/banned-ip-with-csf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | white_list="masukan whitelist ip yang kamu butuhkan" 3 | 4 | # Jika OS mu centos bisa diganti ke secure bagian auth.log nya 5 | tail -f /var/log/auth.log | while read line 6 | do 7 | cmd=$(echo "$line" | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}') 8 | 9 | if echo "$white_list" | grep -qw "$cmd"; then 10 | echo $cmd "this ip is whitelist address" 11 | else 12 | ip_list=$( curl -s https://ipinfo.io/$cmd/json ) 13 | country=$(echo $ip_list | jq -r '.country') 14 | ip=$(echo $ip_list | jq -r '.ip') 15 | 16 | if [ $country != "ID" ]; then 17 | file="/etc/csf/csf.deny" 18 | if ! grep -q "$ip" "$file"; then 19 | echo $ip >> $file && csf -r 20 | else 21 | echo $ip "have been banned" 22 | fi 23 | fi 24 | fi 25 | done -------------------------------------------------------------------------------- /simple_project/cpu_temp.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Contoh skrip sederhana untuk menampilkan 4 | # suhu cpu 5 | 6 | echo "Menampikan suhu CPU" 7 | 8 | TEMP_FILE=/sys/class/thermal/thermal_zone0/temp 9 | 10 | ORI_TEMP=$(cat $TEMP_FILE) 11 | TEMP_C=$((ORI_TEMP/1000)) 12 | TEMP_F=$((TEMP_C *9/5 + 32)) 13 | 14 | # menampilkan hasil 15 | 16 | echo $TEMP_C C -------------------------------------------------------------------------------- /simple_project/cuaca.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NAMA_PROGRAM=CuacaKU 4 | 5 | case $1 in 6 | -h | --help) 7 | echo "$NAMA_PROGRAM" 8 | echo "usage: cuaca [opsi]" 9 | echo "Opsi Long opsi deskripsi" 10 | echo "-h --help menampilkan bantuan" 11 | echo "-l [lokasi] --location [lokasi] menampilkan cuaca di lokasi" 12 | ;; 13 | -l | --location) 14 | curl https://wttr.in/$2 15 | ;; 16 | *) 17 | curl https://wttr.in 18 | ;; 19 | esac 20 | -------------------------------------------------------------------------------- /simple_project/factorial.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "Masukan Angka : \c" 4 | read factorial 5 | 6 | constant=1 7 | for (( i=1; i<=factorial; i++)) 8 | do 9 | constant=$(( $constant * i)) 10 | done 11 | echo "Result is $constant" 12 | -------------------------------------------------------------------------------- /simple_project/fizzbuzz.sh: -------------------------------------------------------------------------------- 1 | for i in {1..50} 2 | do 3 | if (( $i%3 == 0 && $i%5 == 0 )) 4 | then 5 | echo "FizzBuzz" 6 | elif (( $i%5 == 0 )) 7 | then 8 | echo "Buzz" 9 | elif (( $i%3 == 0 )) 10 | then 11 | echo "Fizz" 12 | else 13 | echo $i 14 | fi 15 | done 16 | -------------------------------------------------------------------------------- /simple_project/get_ip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | name="Get IP" 4 | 5 | case $1 in 6 | -h | --help) 7 | echo "$nama" 8 | echo "usage: get_ip [opsi]" 9 | echo "-h | --help menampilkan command detail" 10 | echo "-i | --ip menampilkan detail ip" 11 | ;; 12 | -i | --ip) 13 | curl ipinfo.io/$2 14 | ;; 15 | *) 16 | curl ipinfo.io 17 | ;; 18 | esac -------------------------------------------------------------------------------- /simple_project/kalkulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Calculator By Script Bash" 4 | echo "1. Multiplication" 5 | echo "2. Division" 6 | echo "3. Increment" 7 | echo "4. Subtraction" 8 | echo "=========================================" 9 | 10 | echo -e "Choose The Operation : \c" 11 | read oP 12 | echo -e "Enter Your First Number : \c" 13 | read a 14 | echo -e "Enter Your Two Number : \c" 15 | read b 16 | echo "==========================================" 17 | 18 | if [[ $oP == "1" ]] 19 | then 20 | let c=a*b 21 | echo "The Result Is $c" 22 | elif [[ $oP == "2" ]] 23 | then 24 | let c=a/b 25 | echo "The Result Is $c" 26 | elif [[ $oP == "3" ]] 27 | then 28 | let c=a+b 29 | echo "The Result Is $c" 30 | elif [[ $oP == "4" ]] 31 | then 32 | let c=a-b 33 | echo "The Result Is $c" 34 | else 35 | echo "Unknown Input" 36 | fi 37 | -------------------------------------------------------------------------------- /simple_project/pattern_berlian.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MAX_NO=0 4 | 5 | echo -n "Masukkan angka (dari 5 sampai 9) : " 6 | read MAX_NO 7 | 8 | if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ]; then 9 | echo "tidak boleh dibawah 5 atau diatas 9" 10 | exit 1 11 | fi 12 | 13 | clear 14 | 15 | for ((i = 1; i <= MAX_NO; i++)); do 16 | for ((s = MAX_NO; s >= i; s--)); do 17 | echo -n " " 18 | done 19 | for ((j = 1; j <= i; j++)); do 20 | echo -n " *" 21 | done 22 | echo "" 23 | done 24 | 25 | for ((i = MAX_NO; i >= 1; i--)); do 26 | for ((s = i; s <= MAX_NO; s++)); do 27 | echo -n " " 28 | done 29 | for ((j = 1; j <= i; j++)); do 30 | echo -n " *" 31 | done 32 | echo "" 33 | done -------------------------------------------------------------------------------- /simple_project/pattern_segitiga.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MAX_NO=0 4 | 5 | echo -n "Masukkan angka (dari 5 sampai 9) : " 6 | read MAX_NO 7 | 8 | if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ]; then 9 | echo "tidak boleh dibawah 5 atau diatas 9" 10 | exit 1 11 | fi 12 | 13 | clear 14 | 15 | for ((i = 1; i <= MAX_NO; i++)); do 16 | for ((s = MAX_NO; s >= i; s--)); do 17 | echo -n " " 18 | done 19 | for ((j = 1; j <= i; j++)); do 20 | echo -n " *" 21 | done 22 | echo "" 23 | done -------------------------------------------------------------------------------- /simple_project/prime_checking.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "Enter Number To Checking : \c" 4 | read number 5 | function prime(){ 6 | result=`factor $number | wc -w` 7 | if [[ $result -eq 2 ]] 8 | then 9 | echo "$number bilangan prima" 10 | else 11 | echo "$number bukan bilangan prima" 12 | fi 13 | } 14 | 15 | prime 16 | -------------------------------------------------------------------------------- /simple_project/sorting/bubble_sorting.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | array=(5 2 1 7 3 9) 4 | 5 | # menampilkan array yang tidak tersorting 6 | echo "array yang tidak tersorting:" 7 | echo ${array[*]} 8 | 9 | for ((i = 0; i<${#array[@]}; i++)) 10 | do 11 | 12 | for((j = i; j<${#array[@]}-i-1; j++)) 13 | do 14 | 15 | if ((${array[j]} > ${array[$((j+1))]})) 16 | then 17 | temp=${array[$j]} 18 | array[$j]=${array[$((j+1))]} 19 | array[$((j+1))]=$temp 20 | fi 21 | done 22 | done 23 | 24 | echo "array yang telah di sorting:" 25 | echo ${array[*]} 26 | -------------------------------------------------------------------------------- /simple_project/spinner.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | arr=('-' '\' '|' '/') 4 | while true; do 5 | for c in "${arr[@]}"; do 6 | echo -en "\r $c " 7 | sleep .5 8 | done 9 | done 10 | -------------------------------------------------------------------------------- /simple_project/warna.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | # print berbgai warna 5 | # tekan enter untuk menampikan tiap warna 6 | 7 | for c in 90 31 91 32 33 34 35 95 36 97; do 8 | echo -en "\r \e[${c}m Bellshade \e[0m " 9 | sleep 1 10 | done 11 | 12 | # gunakan perintah ctrl+C untuk keluar dari prograams 13 | -------------------------------------------------------------------------------- /src/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bellshade/Shell/e168f6cc665ef924bab8ad6d2b976e53a09d3c01/src/Screenshot.png -------------------------------------------------------------------------------- /usefull_command/00_read_file/README.md: -------------------------------------------------------------------------------- 1 | # Read File Command 2 | Oke untuk membaca sebuah file sebenarnya ada beberapa cara dengan `cat` ataupun `head`. Namun keduanya memiliki perbedaan mulai dari segi tujuan dan dari segi operatornya. Oke langsung saja kita bahas. 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
NamaDeskripsi
catcat ialah sebuah command dasar linux yang dimana peruntukan untuk membaca file mulai dari awal sampai akhir kalimat, cat bisa dimanipulasi dengan beberapa flag ataupun command tambahan
headhead ialah sebuah command linux yang dimana tujuanya sama dengan cat untuk membaca file namun head diperuntukan untuk membaca file bedasarkan line isi file
18 | 19 | Oke dari deskripsi kita tahu bahwa untuk cat sendiri mungkin lebih spesifikasi ketimbang dengan head. Oke mungkin kita tahu nih spesifiknya tapi bagaimana menggunakanya dengan sangat baik, oke kita bahas satu per satu 20 | 21 | # cat 22 | Oke kita sudah tau `cat` fungsinya buat apa, mari kita bahas `flag` yang dimana berguna ketika di combine. 23 | | Tanda | Deskripsi | 24 | |:--------: |:-----------------------------------------------------------------------------: | 25 | | `>` | Oke tanda ini digunakan untuk memasukan data ke file baru atau yang sudah ada | 26 | | `>>` | Tanda ini digunakan untuk menambahkan data di line paling bawah di dalam file | 27 | | `-n` | Digunakan untuk melihat line dari isi file | 28 | | `-T` | Digunakan untuk `tab` pada file | 29 | | `-s` | Digunakan untuk remove blank lines | 30 | 31 | Sebenarnya banyak banget `flag` yang lain, cuma kali ini kita bahas yang istilahnya paling berguna. Next kita coba buat progam dimana progam itu menyangkut dari `flag` dari file tersebut. Oke sepertinya dibuat progam menarik juga nih, mungkin untuk progam kalian bisa liat disini [`cat.sh`](https://github.com/bellshade/Shell/blob/main/usefull_command/read_file/cat.sh). Oke next kita bahas tentang `head` 32 | 33 | # head 34 | Yosh, kita seperti hal-nya dengan `cat` kita udah tau fungsinya buat, nah mari kita bahas `flag` apa saja yang berguna ketika kita combine dengan `head` 35 | 36 | | Tanda | Deskripsi | 37 | |:------------: |:---------------------------------------------------------------------------------: | 38 | | `-n` | Oke tanda ini digunakan untuk membaca file bedasarkan `line` filenya | 39 | | `-c` | Tanda ini digunakan untuk untuk membaca file bedasarkan per `bytes` | 40 | | `-q` | Digunakan untuk menggabungkan kedua data dari isi file | 41 | | `-v` | Digunakan untuk `verbose` dimana akan muncul nama file diatasnya | 42 | 43 | Oke sebenarnya si `head` ini gak terlalu kompleks dari si `cat` karena mulai dari keterbatasan membaca file yang memiliki maximal 10 line saja. Maka dari itu jarang sekali orang yang memakai `head` tapi ya walaupun begitu sering digunakan dan di combine dengan beberapa command lain maka menghasilkan hal yang unik. Oke mungkin tidak asik kalau `head` tidak di buat sebuah progam, mungkin untuk progam kalian bisa liat disini [`head.sh`](https://github.com/bellshade/Shell/blob/main/usefull_command/read_file/head.sh). Oke mungkin sampai disini aja next kita bahas manipulasinya 44 | 45 | -------------------------------------------------------------------------------- /usefull_command/00_read_file/cat.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -e "Input file : " 3 | read isFile 4 | 5 | progammCat(){ 6 | echo "1. Menambahkan data baru" 7 | echo "2. Menambahkan data baru dari yang sudah ada" 8 | echo "3. Melihat Line dari file" 9 | echo "4. Melihat tab pada file" 10 | echo "5. Remove blank lines" 11 | echo -e "Pilih operasi (1/2/3/4/5) : " 12 | read operation 13 | 14 | if (($operation == 1)) 15 | then 16 | echo -e "Masukan data : " 17 | read isNew 18 | echo $isNew > $isFile 19 | elif (( $operation == 2)) 20 | then 21 | echo -e "Masukan data yang ingin ditambahkan : " 22 | read isNewAgain 23 | echo $isNewAgain >> $isFile 24 | elif (($operation == 3)) 25 | then 26 | cat -n $isFile 27 | elif (( $operation == 4)) 28 | then 29 | cat -T $isFile 30 | elif (( $operation == 5)) 31 | then 32 | cat -s $isFile 33 | else 34 | echo "z0nk" 35 | fi 36 | } 37 | eksekusi(){ 38 | if [[ -f $isFile ]] 39 | then 40 | progammCat 41 | else 42 | echo "Not Found File" 43 | fi 44 | } 45 | eksekusi 46 | -------------------------------------------------------------------------------- /usefull_command/00_read_file/head.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -e "Input file : " 3 | read isFile 4 | 5 | progammHead(){ 6 | echo "1. Membaca data" 7 | echo "2. Membaca bedasrkan bytes" 8 | echo "3. Combine More File" 9 | echo "4. Verbos file" 10 | echo -e "Pilih operasi (1/2/3/4) : " 11 | read operation 12 | 13 | if (($operation == 1)) 14 | then 15 | echo -e "Masukan line : " 16 | read isNew 17 | head -n $isNew $isFile 18 | elif (( $operation == 2)) 19 | then 20 | echo -e "Masukan panjang byte : " 21 | read isNewAgain 22 | head -c $isNewAgain $isFile 23 | elif (($operation == 3)) 24 | then 25 | echo -e "Masukan file lain : " 26 | read isNewFile 27 | head -q $isFile $isNewFile 28 | elif (( $operation == 4)) 29 | then 30 | head -v $isFile 31 | else 32 | echo "z0nk" 33 | fi 34 | } 35 | eksekusi(){ 36 | if [[ -f $isFile ]] 37 | then 38 | progammHead 39 | else 40 | echo "Not Found File" 41 | fi 42 | } 43 | eksekusi 44 | -------------------------------------------------------------------------------- /usefull_command/00_read_file/test.txt: -------------------------------------------------------------------------------- 1 | Hello Workd 2 | Hello World 3 | Arusia 4 | -------------------------------------------------------------------------------- /usefull_command/00_read_file/testing.txt: -------------------------------------------------------------------------------- 1 | Hello My Name is Kiyo 2 | -------------------------------------------------------------------------------- /usefull_command/01_manipulation_read_file/README.md: -------------------------------------------------------------------------------- 1 | # Manipulation Read File 2 | Oke materi ini menjelaskan tingkat lanjut setelah dari `usefull_command read_file`. Hmm, sebenarnya untuk materi ini sangat luas tapi pada kesempatan kali ini akan dibahas beberapa saja, sisanya akan dibahas directory sendiri. Oke langsung saja ke materi, sebenarnya apa si yang dimaksud dengan `manipulation read file` itu sendiri?. Manipulation yang dimaksud ialah dimanan kita mengolah sebuah data menjadi lebih kompleks lagi, contohnya seperti kita ingin membaca file tersebut tapi file tersebut terdapat banyak banget kata tidak mungkin kalau kita baca secara langsung, maka dari itu disini kita bahas `manipulation read file`. Oke apa aja si commandnya?, commandnya itu terdiri dari 2 yaitu : 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
lessDimana berfungsi untuk mengurutkan data ketika membacanya
grepBerfungsi untuk membaca sebuah data dari kata yang telah ditentukan
18 | 19 | 20 | 21 | Nah mungkin ada beebrapa dari kalian sudah paham mengenai command diatas , nah kali ini kita akan membedah lebih dalam lagi untuk memahaminya, mari kita mulai dari `less` 22 | 23 | # less 24 | Kita udah trau less berfungsi untuk mengurutkan data ketika membacanya, nah maksudnya itu bagaimana tuh? kita ambil contoh misalkan kita punya script dan panjang banget kalimatnya nah less berfungsi untuk membuat file tersebut seolah dibaca secara berurut contohnya seperti ini 25 | 26 | ``` 27 | root@alphacentauri:~# cat Kernel.php | less 28 | 40 | 41 | 42 | Flag 43 | Deskripsi 44 | 45 | 46 | 47 | 48 | G 49 | Digunakan ketika sudah melakukan less, dan diperuntukan untuk pindah ke baris awal dan akhir baris 50 | 51 | 52 | xg 53 | Sama halnya dengan G namun x disini adalah angka yang digunakan untuk pindah line sesuai si x 54 | 55 | 56 | -N 57 | Digunakan ketika kita ingin menampilkan line pada isi file 58 | 59 | 60 | -p 61 | Digunakan untuk wrapping kata yang kita masukan contohnya cat Kernel.php | less -p "array" maka kata array akan di mark 62 | 63 | 64 | y or k 65 | Digunakan ketika sudah melakukan `less` dan scrool ke atas 66 | 67 | 68 | e or j 69 | Sama halnya dengan `y or k` namun ini digunakan untuk scrool ke bawah 70 | 71 | 72 | 73 | 74 | Banyak lagi flag yang bisa dimanipulasi, hanya saja `diatas` ialah yang paling banyak yang digunakan, mungkin untuk less hanya seperti ini saja next kita bahas apa itu `grep`. 75 | 76 | # grep 77 | Grep ini berbeda dengan less dimana grep itu sendiri diperuntukan untuk mencari sebuah data yang ingin ditampikan saja. Kita ambil contoh misalkan kita ingin melihat data yang error saja nah grep bisa kita gunakan, atau kita ambil simpel lagi ketika ingin menampilkan kata atau data yang diinginkan grep ialah kuncinya. Oke contohnya sperti ini ada sebuah file `flag.txt` dimana kita pengen nyari kata `flag` karena disitu terdapat kata penting 78 | 79 | ``` 80 | root@alphacentauri:~# cat flag.txt | grep flag 81 | 82 | flagnya ialah akusayangkepadamu 83 | ``` 84 | 85 | Nah ya kurang lebih seperti itu fungsi dari si `grep`, nah next kita bahas flag yang dimana berguna banget ketika di combine 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
FlagDeskripsi
iDigunakan untuk wrapping kata tanpa adanya case-sensitive baik itu huruf kapital ataupun huruf kecil
nUntuk n dimana berguna untuk wrapping kata disertai line-nya
B xMenampilkan sebuah data dari nilai x sebelumnya
A xKeterbalikan dengan si B dimana si A ini wrapping sebuah data dari nilai x di line sesudahnya
C xKeterbalikan dari A dan B dimana si C ini dia akan wrapping sebuah data dari nilai x sebelumnya dan sesudahnya
117 | 118 | Oke untuk materi `manipulation read file` sepertinya cukup disini saja, sebagai bentuk implementasinya kita coba buat progam untuk membandingkan fungsi dari si `less` dan `grep`. Oke next kita akan bahas apa itu `sed dan awk` -------------------------------------------------------------------------------- /usefull_command/01_manipulation_read_file/flag.txt: -------------------------------------------------------------------------------- 1 | The standard Lorem Ipsum passage, used since the 1500s 2 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 3 | 4 | Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC 5 | "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" 6 | 7 | 1914 translation by H. Rackham 8 | "But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?" 9 | 10 | Section 1.10.33 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC 11 | "At vero eos et accusamus et iusto odio qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis flagnya ialah akusayangkepadamu, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." 12 | 13 | 1914 translation by H. Rackham 14 | "On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains." 15 | 16 | -------------------------------------------------------------------------------- /usefull_command/01_manipulation_read_file/manipulation.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Operation Manipulation Read File " 3 | 4 | echo -e "Masukan filenya : \c" 5 | read operation 6 | 7 | manipulation(){ 8 | echo "1. Sorting File (less)" 9 | echo "2. Wrapping File (grep)" 10 | 11 | echo -e "Pilih operasi (1/2) : \c" 12 | read opsi 13 | 14 | if (( $opsi == 1 )) 15 | then 16 | cat $operation | less 17 | else 18 | echo -e "Masukan kata yang di wrapping : \c" 19 | read isGrep 20 | cat $operation | grep $isGrep 21 | fi 22 | } 23 | 24 | if [[ -f $operation ]] 25 | then 26 | manipulation 27 | else 28 | echo "This is Not file" 29 | fi -------------------------------------------------------------------------------- /usefull_command/02_sed_and_awk/README.md: -------------------------------------------------------------------------------- 1 | # sed 2 | Sed dan awk ialah command yang berguna banget dalam operasi shell scripting. Sed dan awk sangat melekat banget dengan yang namanya `Regex`. Sebelum itu mari kita bahas dulu apa yang dimaksud . Sed atau yang sering disebut dengan istilah `stream editor` ialah unix utility yang digunakan untuk parsing dan mengubah text file. Sed disebut dengan `line-oriented` yang dimana beroperasi dalam satu bari di waktu yang sama dan biasanya melekat dengan yang namanya `regular expression / regex`, sed memiliki beberapa `flag` atau perintah umum salah satu yang paling umum ialah `s` yang dimana digunakan untuk subtitusi text file, contohnya seperti ini 3 | 4 | ```bash 5 | #!/bin/dash 6 | 7 | # My First Script 8 | 9 | echo ‘‘ Hello World !’’ 10 | ``` 11 | 12 | Disini kita tau ada yang salah pertama `#!/bin/dash` seharusnya `#!/bin/bash` selanjutnya `My First Script` kurang lengkap dan diganti dengan `My First Shell Script`, nah hasilnya ketika kita untuk replace datanya maka akan seperti ini 13 | 14 | ```console 15 | kiyo@alpha:~/shell/usefull_command$ sudo cat main.sh | sed -e 's/dash/bash/g' -e 's/First/First shell/g' 16 | 17 | #!/bin/bash 18 | 19 | # My First shell Script 20 | 21 | echo ‘‘ Hello World !’’ 22 | ``` 23 | 24 | Dan masih banyak lagi untuk sed ini sebelum lanjut kita bahas dulu `flag` dari sed dan fungsinya 25 | | Pattern | Operation | Command | Operation | 26 | |:-------: |:---------------------------------: |:-------: |:------------------------: | 27 | | s | subtitution | -e | combine mutiple commands | 28 | | g | global replace | -f | read commands from file | 29 | | p | print | -h | print help info | 30 | | I | ignore case | -n | disable print | 31 | | d | delete | -V | print version info | 32 | | G | add newline | -i | in file subtituions | 33 | | w | write to file | | | 34 | | x | exchange pattern with hold buffer | | | 35 | | h | copy pattern to hold buffer | | | 36 | 37 | Oke sebentar sebelum lanjut kita coba mulai dari `\` dan `/` , apa tuh man. Jadi ketika kita ingin subtitusi kan hanya mengambil dari kata yang di ubah, nah ini kita bisa gunakan `/` untuk replace nya, dan menurutku ini jauh lebih baik ketimbang satu kata aja, contohnya seperti ini 38 | 39 | ```bash 40 | #!/bin/dash 41 | 42 | # command sed 43 | 44 | echo "Learning Shell Scripting" 45 | ``` 46 | 47 | nah disini kita ingin mengubah `#!/bin/dash` menjadi `#!/bin/bash` dan kita ingin menambahkan `altermine` setelah sed, nah maka hasilnya akan seperti ini kawan 48 | 49 | ```console 50 | kiyo@alpha:~/shell/usefull_command$ sudo cat main.sh | sed -e 's:/bin/dash:/bin/bash:g' -e 's/sed/sed delimeter/g' 51 | #!/bin/bash 52 | 53 | # command sed delimeter 54 | 55 | echo "Learning Shell Scripting" 56 | ``` 57 | 58 | begitupun dengan `\` semisalnya kita tidak ingin menggunakan `delimeter` atau `/` kita bisa menggunakan `\` untuk escape slash character, contohnya seperti ini 59 | 60 | ```console 61 | kiyo@alpha:~/shell/usefull_command$ sudo sed 's/\/bin\/dash/\bin\/bash/g' main.sh 62 | #!bin/bash 63 | 64 | # command sed 65 | 66 | echo "Learning Shell Scripting" 67 | ``` 68 | 69 | Yaa kira kira seperti itu tentang sed yang digunakan untuk find replace dari kata yang ingin kita ubah, next kita bahas command dari sed salah satunya yaitu `-f` yang dimana digunakan untuk membaca command dari file contoh kita buat nama file `belajar_sed` isinya `s:/shell/scripting:/bin/bash:g`, lalu seperti biasa yang diatas dan kita coba apa yang terjadi 70 | 71 | ```console 72 | kiyo@alpha:~/shell/usefull_command$ sudo sed -f belajar_sed 73 | #!/bin/bash 74 | 75 | # command sed filescript 76 | 77 | echo "Learning Shell Scripting" 78 | ``` 79 | Oke untuk sed mungkin sampai disini dulu, karena command diatas yang sering digunakan dan untuk lebih detail mungkin kita akan bahas di materi regex , lanjut ke awk, oya kalau kalian ingin baca baca tentang sed oneline bisa diliat disini [sideline](http://sed.sourceforge.net/sed1line.txt) 80 | 81 | # awk 82 | Oke sebelumnya kita bahas apa itu sed, sekarang kita bahas apa si yang dimaksud dengan awk. Diawal sudah dibahas bahwa sed dan awk saling keterkaitan dan pastinya si awk berhubungan dengan yang namanya regex. Awk itu sendiri banyak banget yang kegunaaannya, bisa dijadikan command untuk simpel operasi matematika, translate file ke file lainnya, dan banyak lagi. Untuk disini kita bahas yang sering ketemu dan sering digunakan aja. Oya untuk awk sendiri itu ada 3 variasi : awk, nawk, dan gawk 83 | 84 | ``` 85 | awk : Original AWK dari A. Aho, B. W. Kernighnan dan P. Weinberger 86 | nawk : New AWK, AT&T's versi dari AWK 87 | gawk : GNU AWK, untuk ini semua distro linux sudah ada gawk 88 | ``` 89 | 90 | Oke mungkin untuk awk sendiri kita hanya bahas beberapa saja mungkin ke bagian operasi materimatika saja, untuk awk itu sendiri ekskusi sebuah command dengan kata `print`. Oke langsung saja kita bahas , pertama mulai dari pattern awk itu sendiri 91 | 92 | | Pattern | Operation | 93 | |:---------------------: |:-----------------------------------: | 94 | | BEGIN | awal dari input awk | 95 | | END | penanda akhir dari awk | 96 | | Regex | regular expression | 97 | | Relational Expression | biasanya berisi operator logika | 98 | | pattern1, pattern2 | yang digunakan untuk operasi | 99 | 100 | Oke next kita bahas format string apa aja yang ada di awk, di awk sam halnya dengan bahasa pemograman yang lainnya, baik itu %d, %f, %s dan sebagainya . Namun ada beberapa yang berbeda salah satu contohnya yaitu `%g, %G` yang dimana berfungsi untuk conversi ke `untracted zero`. Dan ya mari kita coba awk, mungkin kita akan coba dengan operasi sederhana yaitu random number pake `awk`. 101 | 102 | ```aw 103 | #!/usr/bin/awk -f 104 | BEGIN { 105 | i=0; 106 | while (i++ < 10000){ 107 | x=int(rand()*100 + 0.5) 108 | y[x]++; 109 | } 110 | for (i=0; i<100; i++){ 111 | printf(y[i]) 112 | printf("\n", i) 113 | } 114 | exit; 115 | } 116 | ``` 117 | 118 | Sebelum penutupan kita bahas dulu alurnya jadi disini pertama looping terlebih dahulu dari banyaknya number yang ingin kita buat, setelah itu kita buat perulangan lagi dimana untuk jumlah i yang akan tampil. Oke mungkin untuk awk sampai sini saja, next ketemu di materi `find file` 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /usefull_command/02_sed_and_awk/belajar_sed: -------------------------------------------------------------------------------- 1 | s:/bin/dash:/bin/bash:g 2 | s/sed/sed filescript/g -------------------------------------------------------------------------------- /usefull_command/02_sed_and_awk/learning-awk.awk: -------------------------------------------------------------------------------- 1 | #!/usr/bin/awk -f 2 | BEGIN { 3 | i=0; 4 | while (i++ < 10000){ 5 | x=int(rand()*100 + 0.5) 6 | y[x]++; 7 | } 8 | for (i=0; i<100; i++){ 9 | printf(y[i]) 10 | printf("\n",i) 11 | } 12 | exit; 13 | } -------------------------------------------------------------------------------- /usefull_command/02_sed_and_awk/sed.sh: -------------------------------------------------------------------------------- 1 | #!/bin/dash 2 | # command sed 3 | echo "Learning Shell Scripting" -------------------------------------------------------------------------------- /usefull_command/03_search_file/BELAJAR_SHELL_SCRIPTING.txt: -------------------------------------------------------------------------------- 1 | Belajar shell ya di bellshade aja xixixixi -------------------------------------------------------------------------------- /usefull_command/03_search_file/README.md: -------------------------------------------------------------------------------- 1 | # Search File 2 | Command search file ini sangat berguna banget untuk kita mencari gimana file kita berada atau semisalnya kalian belajar cybersec ini penting untuk mencari file yang mencurigakan. Lalu command search file itu apa saja si ? command search file ada 3 yaitu `which`, `locate`, dan `find`. 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
whichmencari file bedasarkan nama aplikasi yang kita punya
locatemencari nama file dan berguna untuk melihat list konfigurasi dari aplikasi
findfind ini paling populer karena bisa mencari file bedasarkan permission dan namanya
24 | 25 | Oke mungkin kita akan bahas sesuatu tapi untuk find kita akan bahas lebih detail di repo lain untuk saat ini hanya dasarnya saja. And enjoyy to learn about search file 26 | 27 | 28 | # which 29 | Which ialah salah satu command yang berguna untuk mencari sebuah file atau aplikasi yang kita punya. Oke mungkin dari pernyataan yang diatas sedikit ralat aja untuk which ini hanya berfokus kepada aplikasi atau environment yang kita punya, contoh kasus nya gini misalkan kita ingin melihat apakah kita punya aplikasi yang namanya `java` nah kita bisa gunakan command which 30 | 31 | ```console 32 | kiyo@alpha:~/shell/usefull_command$ sudo which java 33 | /usr/bin/java 34 | ``` 35 | 36 | Jadi ya which diperuntukan untuk mencari aplikasi yang telah kita install saja, selain itu di which kita bisa menggunakan beberapa nama progam sekaligus , contoh semisalnya kita ingin mencari `python`, `cpp`, `java`, dan `man` 37 | 38 | ```console 39 | kiyo@alpha:~/shell/usefull_command$ sudo which -a python cpp java bash 40 | /usr/bin/python 41 | /usr/bin/cpp 42 | /usr/bin/java 43 | /usr/bin/bash 44 | ``` 45 | 46 | # locate 47 | Oke locate seperti yang saya jelaskan diatas, locate ini lumayan banyak `flag` yang berguna ketika kita ingin gunakan, nah `flag` nya itu ialah 48 | 49 | | flag | deskripsi | 50 | |:----: |:--------------------------------------------------: | 51 | | -e | digunakan untuk memastikan bahwa file tersebut ada | 52 | | -i | ignore case dari nama file yang kita cari | 53 | | -c | menghitung berapa banyak nama file yang kita cari | 54 | | -n | mencari file bedasarkan jumlah yang kita tentukan | 55 | 56 | Nah mungkin kita coba yang `-i` disini ada 2 file yang kita buat pertama `BELAJAR_SHELLL_SCRIPTING.txt` dan `belajar_shell_scripting.txt` yang dimana file lowercase terdapat di folder `tes`, nah seharusnya output dari command locate -i kedua file tersebut akan keluar baik kita mencari dengan yang lowercase atau uppercase 57 | 58 | ```console 59 | kiyo@alpha:~/shell/usefull_command$ sudo locate belajar_shell_scripting.txt 60 | /home/kiyo/shell/usefull_command/tes/belajar_shell_scripting.txt 61 | /home/kiyo/shell/usefull_command/BELAJAR_SHELL_SCRIPTING.txt 62 | ``` 63 | 64 | Nah mungkin untuk locate itu aja ya, next kita bahas command `find` mungkin ini akan saya bagi dua yang sebelumnya saya bilang jadi disini command dasarnya aja next kita combine dengan permission file dan kalau bisa dengan `stdout` dan `stderr` 65 | 66 | # find 67 | find merupakan command yang sangat berguna untuk mencari sebuah file ataupun folder kita. Find itu sendiri banyak banget fitur yang berguna ketika kita memakai find. Nah seperti yang saya bilang karena ini banyak yang berguna kita bagi dua repo yang repo ini khusus basicnya saja , next akan saya bahas yang advancenya . Oke mari kita bahas find, mungkin pertama dari `flag` nya 68 | 69 | | flag | deskripsi | 70 | |:----------: |:-------------------------------------------------: | 71 | | -L | follow symbolic links | 72 | | -type f | Mencari bedasarkan type file | 73 | | -type d | Mencari bedasarkan type folder | 74 | | -name | Mencari file dengan nama yang ditentukan | 75 | | -not -name | Mencari file dengan namanya bukan yang ditentukan | 76 | | -exec | file yang bisa di execute | 77 | | -perm | permission dari file | 78 | 79 | Oke mungkin kita coba dengan mencari nama file `belajar_shell_scripting.txt` pakai command `find / -name belajar_shell_scripting.txt` 80 | 81 | ```console 82 | kiyo@alpha:~/shell/usefull_command$ sudo find / -name belajar_shell_scripting.txt 83 | /home/kiyo/shell/usefull_command/tes/belajar_shell_scripting.txt 84 | ``` 85 | 86 | Oke untuk materi `search_file` sampai disini saja and next time kita bahas find lebih detail lagi , oke enjoyy learn usefull command in shell scripting 87 | 88 | -------------------------------------------------------------------------------- /usefull_command/03_search_file/search_file.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | which awk 3 | locate belajar_shell_scripting.txt 4 | find / -name belajar_shell_scripting.txt -------------------------------------------------------------------------------- /usefull_command/03_search_file/tes/belajar_shell_scripting.txt: -------------------------------------------------------------------------------- 1 | Belajar shell ya di bellshade aja xixixixi -------------------------------------------------------------------------------- /usefull_command/04_find_advance/README.md: -------------------------------------------------------------------------------- 1 | # Find Advance 2 | Haiiiii, kembali lagi materinya. Kali ini bahas soal find command yang digunakan untuk mencari sebuah file. Mayoritas menggunakan find karena yang usefull dan sangat mudah di implementasi. Sebelumnya sudah dibahas, tapi sedikit yang kita bahas, kali ini akan membahas lebih lanjut. 3 | 4 | # Command 5 | Dibagian ini kita bisa menggunakan permission file untuk mencari sebuah file dengan type yang kita mau cari. Materi ini sempat kita bahs, dan ada hubunganya dengan command `chmod`. Cukup simpel sebenarnya untuk menggabungkan find dengan type permission yang kita mau. 6 | 7 | ```console 8 | kiyo@alpha:~/shell/usefull_command$ sudo find /etc/apache2/ -perm 644 9 | ``` 10 | 11 | Dari situ akan menampilkan output file yang ada di folder `/etc/apache2` dengan permission 644. Lalu selain permission kita juga bisa memanfaatkan sebuah pattern untuk mencari file dengan pattern yang kita mau. Ini biasanya sering dilakukan untuk mencari sebuah file yang ada part bagian namanya sama. Cukup simpel kita bisa lakukan command seperti ini 12 | 13 | ```console 14 | kiyo@alpha:~/shell/usefull_command$ sudo find / -name *.txt 15 | ``` 16 | 17 | Maka outputnya akan mengeluarkan hasil nama file yang memiliki extension .txt. Ada banyak sekali sebenarnya yang bisa kita lakukan dengan command find ini dan inilah beberapa command yang bisa kita gunakan ketika memakai find 18 | 19 | | Command | Example | 20 | |:-----------------:|:-----------------------------------------------------------------------------:| 21 | |`spesific file` | sudo find / -name sample.txt | 22 | |`find and remove` | sudo find / -name sample.txt -exec rm -i {} \; | 23 | |`empty file` | sudo find ./example -empty | 24 | |`search and grep` | sudo find / -type f -name flag.txt -exec grep "BELLSH{" {} \; | 25 | 26 | -------------------------------------------------------------------------------- /usefull_command/04_find_advance/find_advance.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo find / -name sample.txt -------------------------------------------------------------------------------- /usefull_command/04_find_advance/flag.txt: -------------------------------------------------------------------------------- 1 | BELLSH{hello_world} -------------------------------------------------------------------------------- /usefull_command/04_find_advance/sample.txt: -------------------------------------------------------------------------------- 1 | Hello everyone -------------------------------------------------------------------------------- /usefull_command/05_look_services/README.md: -------------------------------------------------------------------------------- 1 | # Pengertian Dasar 2 | Hello, di materi ini akan dibahas mengenai command linux yang berguna untuk melihat services yang berjalan. Untuk materi ini banyak sekali command command yang bisa digunakan, ada `ps -aux`, `systemctl`, `ss -tlpn`, dan sebagainya. Setiap command itu memiliki perbedaan dan cara menggunakanya juga berbeda. Mari kita simak materinya 3 | 4 | # systemctl 5 | Command `systemctl` ini sering digunakan untuk melihat service apa yang mati dan service apa yang berjalan. Command ini cukup simpel menggunakannya 6 | 7 | ```console 8 | kiyo@alpha:~/shell/usefull_command$ sudo systemctl --type=service state=running 9 | ``` 10 | 11 | Outputnya akan menampilkan service yang sedang running di linux tersebut. Oyaa ketika command ada beberapa hal yang harus diketahui 12 | 13 | | Judul | Deskripsi | 14 | |:-----------------:|:-----------------------------------------------------------------------------:| 15 | |`Unit` | Nama dari service atau daemonnya | 16 | |`Load` | untuk load state ini berguna ketika service atau error, ataupun lainnya | 17 | |`Active` | menandakan service mati atau berjalan | 18 | |`Description` | deskripsi singkat dari unit | 19 | 20 | # ps -aux 21 | Command `ps -aux` sering digunakan ketika ingin melihat pid service dan sebagainyaa. Biasanyaa ini banyak banget digunakan ketika ada sesuatu yang aneh dalam servernya. Entah ada file yang running in background atau aktifitas yang dilakukan oleh orang lain. Command ini cukup simpel menggunakannya dengan cara 22 | 23 | ```console 24 | kiyo@alpha:~/shell/usefull_command$ sudo ps -aux 25 | ``` 26 | 27 | Maka outputnya adalah semua pid yang ada dan system yang running, kalau mau liat kurang lebih hasilnya bakal seperti ini 28 | 29 |
30 | 31 |
32 | 33 | `ps -aux` lebih terperinci, karena pid service yang berjalan sama inti dari service itu berjalan ditampilkan sehingga memudahkan untuk dimaintenance 34 | 35 | # ss -tlpn 36 | `ss -tlpn` ini sering digunakan untuk check service dan port yang berjalan pada server. Kerap kali digunakan ketika ingin menjalan services tetapi ada port yang sama. Command nya cukup simpel dengan cara seperti ini 37 | 38 | ```console 39 | kiyo@alpha:~/shell/usefull_command$ ss -tlpn 40 | ``` 41 | 42 | Maka outpunyaa akan menghasilkan semua service yang berjalan dan port yang digunakan, selain port juga terdapat pid yang digunakan. Kurang lebih hasilnya akan seperti ini 43 | 44 | ```console 45 | kiyo@alpha:~/shell/usefull_command$ ss -tlpn 46 | State Recv-Q Send-Q Local Address:Port Peer Address:Port 47 | LISTEN 0 128 0.0.0.0:22 0.0.0.0:* 48 | LISTEN 0 5 127.0.0.1:65000 0.0.0.0:* 49 | LISTEN 0 128 *:80 *:* 50 | LISTEN 0 128 [::]:22 [::]:* 51 | ``` -------------------------------------------------------------------------------- /usefull_command/05_look_services/look_services.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ps -aux -------------------------------------------------------------------------------- /usefull_command/README.md: -------------------------------------------------------------------------------- 1 | # shell scriptting 2 | 3 | script shell adalah progrm komputer yang dirancang oleh shell unix/linux yang dapat berupa salah satunya adalah: 4 | - bourne shell 5 | - C shell 6 | - korn shell 7 | - GNU bourne-again shell 8 | 9 | shell adalah penerjemah baris perintah dan operasi tipikal yang dilakukan oleh skrip shell termasuk manipulasi file, eksekusi program, dan pencetakan teks. 10 | 11 | skrip shell memiliki beberapa konstruksi yang diperlakukan yang memberi tahu lingkungan shell apa yang harus dilakukan dan kapan melakukannya. tentu saja, sebagian besar skrip lebih kompleks. 12 | 13 | bagaimanapun juga, shell adalah bahasa pemograman yang nyata, lengkap dengan variable, struktur kontrol, dan sebagainya. tidak perduli sberapa rumit sebuah skrip, itu masih hanya daftar perintah yang dieksekusi secara berurutan. 14 | 15 | minimum untuk menjalani pogram shell: 16 | 17 | - windows 18 | 19 | Dari windows menyarankan untuk mengaktifkan **windows subsytem for linux** untuk menjalankan program shell. 20 | 21 | - linux / macOs 22 | 23 | Kita tidak perlu mengaktifkan beberapa kebutuhan dan lain-lain karena shell ini dirancang untuk linux dan macOS (unix). 24 | 25 | # Usefull Command 26 | Hello Gais, oke ini folder dari usefull command, disini banyak sekali command-command yang menarik dan berguna ketika kita sedang melakukan operasi. Nex Ditunggu aja materinya , mungkin akan di update setelah materi advance terpenuhi 27 | 28 | Next : manipulation read file 29 | --------------------------------------------------------------------------------