Difference between revisions of "BASH/C2/String-and-File-attributes/English"
(2 intermediate revisions by 2 users not shown) | |||
Line 15: | Line 15: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Dear friends, Welcome to the spoken tutorial on | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Dear friends, Welcome to the spoken tutorial on | ||
− | '''String and File Attributes | + | '''String and File Attributes comparison in Bash.''' |
|- | |- | ||
Line 21: | Line 21: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| In this tutorial, we will learn | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| In this tutorial, we will learn | ||
− | * '''String comparison''' | + | * '''String comparison''' and |
− | * '''File attributes comparison''' | + | * '''File attributes comparison''' |
− | + | ||
+ | We will do this using a few examples. | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Display Slide 3 | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Display Slide 3 | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| For this tutorial I am using | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| For this tutorial, I am using |
− | + | * '''Ubuntu Linux''' 12.04 Operating System and | |
− | * '''Ubuntu Linux''' 12.04 | + | * '''GNU BASH''' version 4.1.10 |
− | * '''GNU BASH''' version 4. | + | |
− | Please note,''' GNU | + | Please note,''' GNU Bash''' version 4 or above, is recommended to practise this tutorial. |
|- | |- | ||
Line 40: | Line 39: | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us start with an introduction. There are two ways to compare a '''string''' in '''Bash'''. | ||
− | + | 1) First: using == (equal to equal to) operator | |
− | + | To compare two '''equal strings'''. | |
− | + | 2) Second: using != (not equal to) operator | |
− | + | To compare two '''not equal strings'''. | |
− | + | ||
− | To compare two not equal strings. | + | |
Line 56: | Line 54: | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I have a simple program here that checks the user ID. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I have a simple program here, that checks the user ID. |
− | Open a file in your editor and save it as '''strcompare | + | Open a file in your editor and save it as '''strcompare dot sh''' |
− | Now, type the code as shown here, in your '''strcompare | + | Now, type the code as shown here, in your '''strcompare dot sh '''file |
|- | |- | ||
Line 68: | Line 66: | ||
'''<nowiki>#!/bin/bash </nowiki>''' | '''<nowiki>#!/bin/bash </nowiki>''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| This is shebang line. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me explain the code. This is '''shebang line.''' |
|- | |- | ||
Line 78: | Line 76: | ||
'''<nowiki>if [ "$(whoami)" != 'root' ]; then </nowiki>''' | '''<nowiki>if [ "$(whoami)" != 'root' ]; then </nowiki>''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The '''if '''statement checks the output of the variable '''whoami '''against the '''string “root”'''. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The '''if '''statement checks the output of the variable '''whoami ''' against the '''string “root”'''. |
− | We have used '''not-equal to '''operator here to compare strings. | + | We have used '''not-equal to '''operator here to compare '''strings'''. |
|- | |- | ||
Line 87: | Line 85: | ||
'''echo "You have no permission to run $0 as non-root user." ''' | '''echo "You have no permission to run $0 as non-root user." ''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| If the current user is not the '''root user,''' then | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| If the current user is not the '''root user,''' then it will '''echo''' this statement - |
− | + | ||
− | it will '''echo''' this statement - | + | |
− | '''“You have no permission to run strcompare | + | '''“You have no permission to run strcompare dot sh as non-root user.”''' |
− | Here '''$0''' is the ''' | + | Here '''$0 (dollar zero)''' is the '''zeroeth '''argument which is a '''filename '''itself. |
|- | |- | ||
Line 115: | Line 111: | ||
And here with '''fi, '''we end the '''if statement.''' | And here with '''fi, '''we end the '''if statement.''' | ||
− | |||
− | |||
− | |||
|- | |- | ||
Line 131: | Line 124: | ||
An erroneous command returns a '''non-zero''' '''value.''' | An erroneous command returns a '''non-zero''' '''value.''' | ||
− | It can be interpreted as an error code. | + | It can be interpreted as an '''error code'''. |
− | We can customize the return value of the '''exit statement | + | We can customize the return value of the '''exit statement '''. |
|- | |- | ||
Line 146: | Line 139: | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Open the terminal by pressing | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Open the terminal by pressing '''Ctrl+Alt+T '''keys simultaneously on your keyboard. |
− | + | ||
− | '''Ctrl+Alt+T '''keys simultaneously on your keyboard. | + | |
|- | |- | ||
Line 154: | Line 145: | ||
'''whoami''' | '''whoami''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now first let's check the current user of the system. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now first, let's check the current user of the system. |
Type '''whoami '''and press '''Enter.''' | Type '''whoami '''and press '''Enter.''' | ||
− | This will output the name of the current user | + | This will output the name of the current user. |
|- | |- | ||
Line 169: | Line 160: | ||
Type '''chmod +x strcompare.sh''' | Type '''chmod +x strcompare.sh''' | ||
− | |||
|- | |- | ||
Line 175: | Line 165: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Then type '''./strcompare.sh''' | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Then type '''./strcompare.sh''' | ||
− | |||
|- | |- | ||
Line 183: | Line 172: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as: | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as: | ||
− | '''You have no permission to run | + | '''You have no permission to run dot slash strcompare dot sh as non-root user.''' |
|- | |- | ||
Line 193: | Line 182: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let's execute the same '''program''' as '''root user.''' | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let's execute the same '''program''' as '''root user.''' | ||
− | Type: '''sudo | + | Type: '''sudo dot slash strcompare.sh ''' |
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| It will prompt for a password. Give your password here. | ||
|- | |- | ||
Line 199: | Line 192: | ||
'''The output''' | '''The output''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as: | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as: '''Welcome root!. ''' |
− | + | ||
− | '''Welcome root!. ''' | + | |
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| FILE ATTRIBUTES | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| FILE ATTRIBUTES | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let's learn about the '''file attributes '''comparison. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now, let's learn about the '''file attributes '''comparison. |
|- | |- | ||
Line 213: | Line 204: | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| In this program we will check whether a given file exists or not. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| In this program, we will check whether a given file exists or not. |
|- | |- | ||
Line 230: | Line 221: | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Then '''-f''' command checks whether the file exists or not. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Then '''-(hyphen) f''' command checks whether the file exists or not. |
And whether it is a normal file. | And whether it is a normal file. | ||
Line 249: | Line 240: | ||
'''fi''' | '''fi''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Else, it will '''echo "File does not exist" ''' |
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| On the terminal | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| On the terminal | ||
− | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us switch to the '''terminal''' and let us execute our file. | |
− | + | ||
− | + | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us switch to the '''terminal''' and execute | + | |
|- | |- | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| ''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Type: '''chmod +x fileattrib.sh''' |
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type '''chmod plus x fileattrib dot sh''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"|Type '''./fileattrib.sh''' |
− | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type: '''dot slash fileattrib dot sh''' | |
− | '''./fileattrib.sh''' | + | |
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type ''' | + | |
− | + | ||
− | + | ||
|- | |- | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight output |
− | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is displayed as: | |
− | + | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The output is: | + | |
'''File exists and is a normal file''' | '''File exists and is a normal file''' | ||
Line 292: | Line 269: | ||
'''gedit empty.sh &''' | '''gedit empty.sh &''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Before executing our program, I will create an empty file. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Before executing our program, I will create an empty file named as '''empty dot sh'''. |
− | Type '''gedit empty | + | Type '''gedit empty dot sh ampersand sign''' |
− | and | + | Click on '''Save''' and close the file. |
|- | |- | ||
Line 312: | Line 289: | ||
'''then''' | '''then''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us replace the '''- (hyphen) f''' attrib with '''- (hyphen) s''' attribute. |
− | + | ||
− | Let us replace the '''-f''' | + | |
|- | |- | ||
Line 324: | Line 299: | ||
'''file1= “/home/ttt/empty.sh”''' | '''file1= “/home/ttt/empty.sh”''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Replace the filename here as well. Type ''' empty.sh ''' |
|- | |- | ||
Line 342: | Line 317: | ||
'''echo “File is empty”''' | '''echo “File is empty”''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now replace the first echo statement with: | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now, replace the first''' echo statement''' with: |
'''echo “File exists and is not empty”''' | '''echo “File exists and is not empty”''' | ||
− | And the second echo statement with: | + | And the second '''echo statement''' with: |
'''echo “File is empty”''' | '''echo “File is empty”''' | ||
− | |||
− | |||
Line 361: | Line 334: | ||
'''./fileattrib.sh''' | '''./fileattrib.sh''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Come back to the terminal. Let me clear the prompt. |
− | Type ''' | + | Let's execute. |
+ | |||
+ | Type '''dot slash fileattrib dot sh''' | ||
and press '''Enter.''' | and press '''Enter.''' | ||
Line 375: | Line 350: | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let us see another file attribute which will check the '''write premission''' of any file. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now, let us see another file attribute, which will check the '''write premission''' of any file. |
− | + | ||
− | + | ||
Line 392: | Line 365: | ||
'''then''' | '''then''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Come back to our program. Let us replace the '''- (hyphen) s''' attribute with '''- (hyphen) w'''. |
|- | |- | ||
Line 411: | Line 384: | ||
'''echo “User don't have write permission to this file”''' | '''echo “User don't have write permission to this file”''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now replace the first echo statement with: | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now replace the first '''echo statement''' with: |
− | ''' | + | '''“User has write permission to this file”''' |
− | And second echo statement with: | + | And second''' echo statement''' with: |
− | ''' | + | '''“User doesn't have write permission to this file”''' |
+ | |||
+ | Click on '''Save'''. | ||
|- | |- | ||
Line 423: | Line 398: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I will use a different file for this example. | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I will use a different file for this example. | ||
− | I will select a file which is | + | I will select a file, which is not a readable file or which does not have '''write permission'''. |
|- | |- | ||
Line 431: | Line 406: | ||
'''Save the file''' | '''Save the file''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me change the filepath to | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let me change the '''filepath''' to |
− | ''' | + | '''“slash etc slash mysql slash debian dot cnf”''' |
− | + | Click on '''Save'''. | |
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| '''Switch to the terminal''' | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| '''Switch to the terminal''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us execute our program | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us execute our program. |
− | + | Press the '''up-arrow key'''. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | '''. | + | |
|- | |- | ||
Line 455: | Line 422: | ||
'''Output''' | '''Output''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| We see that the output as: | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| We see that the output is displayed as: |
'''User doesn't have write permission to this file.''' | '''User doesn't have write permission to this file.''' | ||
Line 461: | Line 428: | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now, let us see another example based on file attributes. |
− | In this example we will check whether '''file1''' is newer than '''file2.''' | + | In this example, we will check whether '''file1''' is newer than '''file2.''' |
|- | |- | ||
Line 476: | Line 443: | ||
− | + | Let's go through the code. | |
|- | |- | ||
Line 487: | Line 454: | ||
The two files have already been created and are empty. | The two files have already been created and are empty. | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight '''if''' | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Here we check whether '''file1''' is newer than '''file2.''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight the echo statements as per the narration | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| If the '''condition''' is '''true''', we print '''file1 is newer than file2.''' | ||
+ | |||
+ | Else, '''file2 is newer than file1.''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Here is another '''if statement.''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight '''if''' | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Here we check whether '''file1''' is older than '''file2.''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Highlight the echo statements as per the narration | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| If the '''condition''' is '''true''', we print '''file1 is older than file2.''' | ||
+ | |||
+ | Else, we print '''file2 is older than file1.''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"|On the '''terminal''' | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Come back to our '''terminal.''' | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Open''' empty1.sh''' | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Open''' empty1.sh''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| First, we will edit '''empty1.sh''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| First, we will edit '''empty1.sh''' file |
|- | |- | ||
Line 500: | Line 495: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I will just add an '''echo statement''' in it. | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| I will just add an '''echo statement''' in it. | ||
− | Type: '''echo | + | Type: '''echo within doubel quotes Hiii after the double quotes greater than sign empty one dot sh''' |
+ | |||
+ | Press '''Enter'''. | ||
|- | |- | ||
Line 508: | Line 505: | ||
'''chmod +x fileattrib2.sh''' | '''chmod +x fileattrib2.sh''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now, let us make our script executeable. |
− | + | Type - | |
− | '''chmod | + | '''chmod plus x fileattrib2 dot sh''' |
|- | |- | ||
Line 520: | Line 517: | ||
'''./fileattrib2.sh''' | '''./fileattrib2.sh''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now type ''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now type '''dot slash fileattrib2 dot sh''' |
− | + | ||
Line 546: | Line 542: | ||
Here also I will add an '''echo statement.''' | Here also I will add an '''echo statement.''' | ||
+ | |||
+ | |||
|- | |- | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Type echo within double quotes ''' "How are you" ''' after the quotes '''empty2.sh'''. |
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Type echo within double quotes ''' "How are you" ''' after the quotes greater than sign >'''empty2.sh'''. | ||
+ | Let me clear the prompt. | ||
+ | |||
+ | |||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now let us execute our script again. Press the up-arrow key. Go to '''./fileattrib2.sh''' | ||
+ | Press Enter | ||
− | |||
− | |||
|- | |- | ||
Line 557: | Line 562: | ||
'''Output''' | '''Output''' | ||
− | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Now the output is displayed as: |
'''file2 is newer than file1''' | '''file2 is newer than file1''' | ||
'''file1 is older than file2''' | '''file1 is older than file2''' | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| This brings us to the end of this tutorial. | ||
+ | |||
|- | |- |
Latest revision as of 12:18, 13 November 2013
Title of script: String and File Attributes comparison in Bash
Author: Ashwini Patil
Keywords: video tutorial, ==, !=, string compare, file attributes.
|
|
---|---|
Display Slide 1 | Dear friends, Welcome to the spoken tutorial on
String and File Attributes comparison in Bash. |
Display Slide 2 | In this tutorial, we will learn
We will do this using a few examples. |
Display Slide 3 | For this tutorial, I am using
|
Display Slide 4
|
Let us start with an introduction. There are two ways to compare a string in Bash.
1) First: using == (equal to equal to) operator To compare two equal strings. 2) Second: using != (not equal to) operator To compare two not equal strings.
|
I have a simple program here, that checks the user ID.
| |
Highlight
#!/bin/bash |
Let me explain the code. This is shebang line. |
whoami | whoami command gives the username of the current user. |
Highlight
if [ "$(whoami)" != 'root' ]; then |
The if statement checks the output of the variable whoami against the string “root”.
|
Highlight
echo "You have no permission to run $0 as non-root user." |
If the current user is not the root user, then it will echo this statement -
“You have no permission to run strcompare dot sh as non-root user.”
|
Highlight
else echo "Welcome root!. " |
If the user is the root user, it will echo -
“Welcome root!” |
Highlight
exit 0; |
Then we have the exit statement for the program.
|
Let us switch back to our slides to know more about exit statement. | |
Display Slide | Every program returns an exit status.
A successful command returns a 0 (zero). An erroneous command returns a non-zero value. It can be interpreted as an error code. We can customize the return value of the exit statement . |
Now, let's execute the program. | |
Press Ctrl+Alt+T
on the Terminal:
|
Open the terminal by pressing Ctrl+Alt+T keys simultaneously on your keyboard. |
Type:
whoami |
Now first, let's check the current user of the system.
Type whoami and press Enter.
|
Type:
chmod +x strcompare.sh |
Now let's make our file executable.
Type chmod +x strcompare.sh
|
Type ./strcompare.sh | Then type ./strcompare.sh
|
Highlight
The output |
The output is displayed as:
You have no permission to run dot slash strcompare dot sh as non-root user. |
On the terminal
Type: sudo su Type: ./strcompare.sh |
Now let's execute the same program as root user.
Type: sudo dot slash strcompare.sh |
It will prompt for a password. Give your password here. | |
Highlight
The output |
The output is displayed as: Welcome root!. |
FILE ATTRIBUTES | Now, let's learn about the file attributes comparison. |
I already have a working example of the code. | |
In this program, we will check whether a given file exists or not. | |
Highlight
file1=“/home/ttt/fileattrib.sh” |
file1 is the variable in which we save the path of the file. |
Highlight
if [ -f $file1 ]; then
|
Then -(hyphen) f command checks whether the file exists or not.
And whether it is a normal file. |
Highlight
echo "File exists and is a normal file"
|
If the condition is true, it will echo "File exists and is a normal file" |
else
echo "File does not exist" fi |
Else, it will echo "File does not exist" |
On the terminal | Let us switch to the terminal and let us execute our file. |
Type: chmod +x fileattrib.sh | Type chmod plus x fileattrib dot sh
|
Type ./fileattrib.sh | Type: dot slash fileattrib dot sh |
Highlight output | The output is displayed as:
File exists and is a normal file |
Now we will check whether the file is empty or not. | |
Type on the terminal
gedit empty.sh & |
Before executing our program, I will create an empty file named as empty dot sh.
Type gedit empty dot sh ampersand sign Click on Save and close the file. |
Replace
if [ -f $file1 ]; then
then |
Let us replace the - (hyphen) f attrib with - (hyphen) s attribute. |
Replace
file1= “/home/ttt/fileattrib.sh” with file1= “/home/ttt/empty.sh” |
Replace the filename here as well. Type empty.sh |
Replace
echo "File exists and is a normal with echo "File exists and is not empty" AND "File does not exist" with echo “File is empty” |
Now, replace the first echo statement with:
echo “File exists and is not empty” And the second echo statement with: echo “File is empty”
|
On the terminal | Click on Save. |
Type:
./fileattrib.sh |
Come back to the terminal. Let me clear the prompt.
Let's execute. Type dot slash fileattrib dot sh and press Enter. |
Highlight
Output |
The output is File is empty. |
Now, let us see another file attribute, which will check the write premission of any file.
| |
Replace
if [ -s $file1 ]; then with if [ -w $file1 ]; then |
Come back to our program. Let us replace the - (hyphen) s attribute with - (hyphen) w. |
Replace
with echo “User has write permission to this file” AND echo "file is empty" with echo “User don't have write permission to this file” |
Now replace the first echo statement with:
“User has write permission to this file” And second echo statement with: “User doesn't have write permission to this file” Click on Save. |
I will use a different file for this example.
I will select a file, which is not a readable file or which does not have write permission. | |
Replace the filepath with
“/etc/mysql/debian.cnf” Save the file |
Let me change the filepath to
“slash etc slash mysql slash debian dot cnf” Click on Save. |
Switch to the terminal | Let us execute our program.
Press the up-arrow key. |
Highlight
Output |
We see that the output is displayed as:
User doesn't have write permission to this file. |
Now, let us see another example based on file attributes.
In this example, we will check whether file1 is newer than file2. | |
Switch to fileattrib2.sh
Point cursor to the filename fileattrib2.sh |
Let us see the program.
Note that the filename is fileattrib2.sh
|
Highlight
file1= “/home/ttt/empty1.sh” file2= “/home/ttt/empty2.sh” |
Here we have two variables file1 and file2.
The two files have already been created and are empty. |
Highlight if | Here we check whether file1 is newer than file2. |
Highlight the echo statements as per the narration | If the condition is true, we print file1 is newer than file2.
Else, file2 is newer than file1. |
Here is another if statement. | |
Highlight if | Here we check whether file1 is older than file2. |
Highlight the echo statements as per the narration | If the condition is true, we print file1 is older than file2.
Else, we print file2 is older than file1. |
On the terminal | Come back to our terminal. |
Open empty1.sh | First, we will edit empty1.sh file |
Type:
#!/bin/bash echo “Hiii” |
I will just add an echo statement in it.
Type: echo within doubel quotes Hiii after the double quotes greater than sign empty one dot sh Press Enter. |
On the terminal
Type: chmod +x fileattrib2.sh |
Now, let us make our script executeable.
Type - chmod plus x fileattrib2 dot sh |
On the terminal
Type: ./fileattrib2.sh |
Now type dot slash fileattrib2 dot sh
|
Highlight
Output |
We see the output as:
file1 is newer than file2 file2 is older than file1 |
Open empty2.sh
Type: #!/bin/bash echo “Hello” |
Now let's edit empty2.sh
Here also I will add an echo statement.
|
Type echo within double quotes "How are you" after the quotes empty2.sh. | Type echo within double quotes "How are you" after the quotes greater than sign >empty2.sh.
Let me clear the prompt.
|
Now let us execute our script again. Press the up-arrow key. Go to ./fileattrib2.sh
Press Enter
| |
Highlight
Output |
Now the output is displayed as:
file2 is newer than file1 file1 is older than file2 |
This brings us to the end of this tutorial.
| |
Display Slide 8
Summary |
Let us summarise.
In this tutorial we learnt, String comparison file attributes == != -f -s -w -nt -ot |
Display Slide 9
Assignment |
As an assignment
Explore some more attributes. Ex: -r -x -o |
Display Slide 10
http://spoken-tutorial.org /What\_is\_a\_Spoken\_Tutorial About the Spoken Tutorial Project |
Watch the video available at the link shown below
It summarises the Spoken Tutorial project If you do not have good bandwidth, you can download and watch it |
Display Slide 11
Spoken Tutorial Workshops |
The Spoken Tutorial Project Team
Conducts workshops using spoken tutorials Gives certificates to those who pass an online test For more details, please write to contact@spoken-tutorial.org |
Display Slide 12
Acknowledgement |
Spoken Tutorial Project is a part of the Talk to a Teacher project
It is supported by the National Mission on Education through ICT, MHRD, Government of India More information on this Mission is available at: http://spoken-tutorial.org\NMEICT-Intro |
The script has been contributed by Fossee and spoken-tutorial teams.
This is Ashwini Patil from IIT Bombay Thank You for joining. |