# File in bash

Bash script that gives you information about the `school` file.

Requirements:

* Your Bash script should check if the file exists and print:
    
    * if the file exists: `school file exists`
        
    * if the file does not exist: `school file does not exist`
        
* If the file exists, print:
    
    * if the file is empty: `school file is empty`
        
    * if the file is not empty: `school file is not empty`
        
    * if the file is a regular file: `school is a regular file`
        
    * if the file is not a regular file: (nothing)
        

```bash
if [ -e "school" ]
then
        echo "school file exists"
        if [ -s "school" ]
        then
                echo "school file is not empty"
        else
                echo "school file is empty"
        fi

        if [ -f "school" ]
        then
                echo "school is a regular file"
        fi
else
        echo "school file does no exist"
fi
```

The conditions `-e`, `-s`, and `-f` are used in Bash scripting to check different properties of a file. Here's the meaning of each condition:

1. `-e`: This condition checks if a file exists. It returns true if the file exists, regardless of its type (regular file, directory, symbolic link, etc.). You can remember it as "e" standing for "existence."
    
2. `-s`: This condition checks if a file is not empty. It returns true if the file exists and has a size greater than zero (i.e., it is not empty). You can remember it as "s" standing for "size."
    
3. `-f`: This condition checks if a file is a regular file. It returns true if the file exists and is a regular file (i.e., not a directory, symbolic link, or other special file type). You can remember it as "f" standing for "file."
    

To effectively remember these conditions, you can associate them with their meanings and mnemonic devices. Here are some suggestions:

* `-e`: "e" for "existence" - Remember that `-e` checks if the file exists.
    
* `-s`: "s" for "size" - Think of it as checking if the file has a non-zero size, meaning it is not empty.
    
* `-f`: "f" for "file" - Use it to check if the file is a regular file, not a directory or special file type.
    

You can also refer to the Bash documentation or use mnemonic devices that make sense to you personally.

### dirname command

The `dirname` command is used to extract the directory path from a given file path. When you run `dirname "$file_path"`, it will return the directory path of the file specified by `$file_path`.

For example, if `$file_path` is set to `/var/run/myscript.pid`, running `dirname "$file_path"` will output `/var/run`. It removes the last component (filename) from the path and returns the remaining directory path.

Here's a simple demonstration:

```bash
file_path="/var/run/myscript.pid"
directory=$(dirname "$file_path")
echo "$directory"
```

Output:

```bash
/var/run
```

In the script, we use `dirname "$file_path"` to extract the directory path and store it in the variable `$directory`. This allows us to create the necessary subfolders using `mkdir -p "$directory"`.

### \-e and -f option

The `-e` option is used in conditional expressions or tests in bash scripting to check if a file or directory exists.

`file_path="a/b/c/d/e/f/g/h/i.py"`

**if \[ -e "$file\_path" \]:** Using `-e` ensures that the script can handle scenarios where `$file_path` could refer to either a file or a directory.

**if \[ -e "$file\_path" \]:** This will only check if the file `i.py` exists

### Deleting the directories recursively

```bash
rm -rf /var/run/myscript.pid
```

running the command `rm -rf /var/run/myscript.pid` will only remove the file `/var/run/myscript.pid` and not any other files or directories within the `/var/run` directory.

In the given command, `-r` is used to enable recursive deletion, allowing `rm` to remove directories and their contents. However, since you're specifying a file (`/var/run/myscript.pid`) rather than a directory, the `-r` option has no effect in this case.

The `-f` option is used to force the removal without prompting for confirmation. It ensures that `rm` doesn't ask for confirmation before deleting the specified file.

To clarify, executing `rm -rf /var/run/myscript.pid` will only remove the file `/var/run/myscript.pid` and will not affect any other files or directories within the `/var/run` directory.

```bash
rm -rf /var/run
```

The `-r` and `-f` options are used with the `rm` command to modify its behavior:

1. `-r` (or `--recursive`): This option enables recursive deletion of directories and their contents. When used with `rm`, it allows you to remove directories and their contents in addition to individual files. Without this option, `rm` cannot delete directories.
    
2. `-f` (or `--force`): This option forces the removal of files and directories without prompting for confirmation. It suppresses warning messages and allows `rm` to delete read-only files and directories. With `-f`, `rm` will not stop or prompt for confirmation, which can be useful when performing automated or scripted removals.
    

If you only want to remove the file `/var/run/myscript.pid`, you can use the `rm` command without the `-rf` options as follows:

```bash
rm /var/run/myscript.pid
```

This command will remove the specific file without recursively deleting directories or forcefully removing read-only files.

If you use `rm` without the `-f` option, it will prompt for confirmation before deleting each file or directory. Without `-f`, `rm` ensures that you explicitly confirm the deletion, helping prevent accidental removal of important files or directories.

If you run the command `rm /var/run`, and the `/var/run` directory contains files or subdirectories, `rm` will display a prompt for each entry, asking you to confirm the deletion. Here's an example:

```bash
$ rm /var/run
rm: remove directory '/var/run'? 
```

To proceed with the deletion, you would need to enter 'y' (yes) and press Enter for each prompt. If you enter 'n' (no) or any other input, `rm` will skip that entry and move on to the next one.

Using the `-f` option suppresses these confirmation prompts, making the deletion process non-interactive and more suitable for scripts or cases where you don't want to manually confirm each deletion. However, it is essential to exercise caution when using `-f` to avoid accidentally removing important files or directories.if the file is empty: `school file is empty`

* * if the file is not empty: `school file is not empty`
        
    * if the file is a regular file: `school is a regular file`
        
    * if the file is not a regular file: (nothing)
        

```bash
if [ -e "school" ]
then
        echo "school file exists"
        if [ -s "school" ]
        then
                echo "school file is not empty"
        else
                echo "school file is empty"
        fi

        if [ -f "school" ]
        then
                echo "school is a regular file"
        fi
else
        echo "school file does no exist"
fi
```

The conditions `-e`, `-s`, and `-f` are used in Bash scripting to check different properties of a file. Here's the meaning of each condition:

1. `-e`: This condition checks if a file exists. It returns true if the file exists, regardless of its type (regular file, directory, symbolic link, etc.). You can remember it as "e" standing for "existence."
    
2. `-s`: This condition checks if a file is not empty. It returns true if the file exists and has a size greater than zero (i.e., it is not empty). You can remember it as "s" standing for "size."
    
3. `-f`: This condition checks if a file is a regular file. It returns true if the file exists and is a regular file (i.e., not a directory, symbolic link, or other special file type). You can remember it as "f" standing for "file."
    

To effectively remember these conditions, you can associate them with their meanings and mnemonic devices. Here are some suggestions:

* `-e`: "e" for "existence" - Remember that `-e` checks if the file exists.
    
* `-s`: "s" for "size" - Think of it as checking if the file has a non-zero size, meaning it is not empty.
    
* `-f`: "f" for "file" - Use it to check if the file is a regular file, not a directory or special file type.
    

You can also refer to the Bash documentation or use mnemonic devices that make sense to you personally.

### dirname command

The `dirname` command is used to extract the directory path from a given file path. When you run `dirname "$file_path"`, it will return the directory path of the file specified by `$file_path`.

For example, if `$file_path` is set to `/var/run/myscript.pid`, running `dirname "$file_path"` will output `/var/run`. It removes the last component (filename) from the path and returns the remaining directory path.

Here's a simple demonstration:

```bash
file_path="/var/run/myscript.pid"
directory=$(dirname "$file_path")
echo "$directory"
```

Output:

```bash
/var/run
```

In the script, we use `dirname "$file_path"` to extract the directory path and store it in the variable `$directory`. This allows us to create the necessary subfolders using `mkdir -p "$directory"`.

### \-e and -f option

The `-e` option is used in conditional expressions or tests in bash scripting to check if a file or directory exists.

`file_path="a/b/c/d/e/f/g/h/i.py"`

**if \[ -e "$file\_path" \]:** Using `-e` ensures that the script can handle scenarios where `$file_path` could refer to either a file or a directory.

**if \[ -e "$file\_path" \]:** This will only check if the file `i.py` exists

### Deleting the directories recursively

```bash
rm -rf /var/run/myscript.pid
```

running the command `rm -rf /var/run/myscript.pid` will only remove the file `/var/run/myscript.pid` and not any other files or directories within the `/var/run` directory.

In the given command, `-r` is used to enable recursive deletion, allowing `rm` to remove directories and their contents. However, since you're specifying a file (`/var/run/myscript.pid`) rather than a directory, the `-r` option has no effect in this case.

The `-f` option is used to force the removal without prompting for confirmation. It ensures that `rm` doesn't ask for confirmation before deleting the specified file.

To clarify, executing `rm -rf /var/run/myscript.pid` will only remove the file `/var/run/myscript.pid` and will not affect any other files or directories within the `/var/run` directory.

```bash
rm -rf /var/run
```

The `-r` and `-f` options are used with the `rm` command to modify its behavior:

1. `-r` (or `--recursive`): This option enables recursive deletion of directories and their contents. When used with `rm`, it allows you to remove directories and their contents in addition to individual files. Without this option, `rm` cannot delete directories.
    
2. `-f` (or `--force`): This option forces the removal of files and directories without prompting for confirmation. It suppresses warning messages and allows `rm` to delete read-only files and directories. With `-f`, `rm` will not stop or prompt for confirmation, which can be useful when performing automated or scripted removals.
    

If you only want to remove the file `/var/run/myscript.pid`, you can use the `rm` command without the `-rf` options as follows:

```bash
rm /var/run/myscript.pid
```

This command will remove the specific file without recursively deleting directories or forcefully removing read-only files.

If you use `rm` without the `-f` option, it will prompt for confirmation before deleting each file or directory. Without `-f`, `rm` ensures that you explicitly confirm the deletion, helping prevent accidental removal of important files or directories.

If you run the command `rm /var/run`, and the `/var/run` directory contains files or subdirectories, `rm` will display a prompt for each entry, asking you to confirm the deletion. Here's an example:

```bash
$ rm /var/run
rm: remove directory '/var/run'?
```

To proceed with the deletion, you would need to enter 'y' (yes) and press Enter for each prompt. If you enter 'n' (no) or any other input, `rm` will skip that entry and move on to the next one.

Using the `-f` option suppresses these confirmation prompts, making the deletion process non-interactive and more suitable for scripts or cases where you don't want to manually confirm each deletion. However, it is essential to exercise caution when using `-f` to avoid accidentally removing important files or directories.
