【CO004】操作系统实践笔记3 —— Shell Script 语法速记

笔者:YY同学

生命不息,代码不止。好玩的项目尽在GitHub


PS:尽量不要使用空格,除非语法规定必须使用!!

1. Comment

# Single line comment

: '  
Multi-line comment 
This is the first comment  
This is the second comment  
This is the third comment  
'  

2. Print

echo "Hello World!"

3. Variable

# global variable definition
mynum=1315  # number
mystr="hello world"  # string

# local variable definition
local mystr="abc"
mystr+=123  # Final restul is "abc123"

4. Retrieve Variable

# use $variable_name, {} is used to show more clear boundary
mynum=123
code="abc"
mystr=${code}
 
# grow mystr from abc to “abc123" 
echo "Before: ${mystr}"
mystr+=${mynum}
echo "After: ${mystr}"

5. Array

# define an array
myarray=()
myarray=("three" 1 "five" 0)

# set value
myarray[2]="eight"
myarray[5]="!"

# print different result
echo "${myarray[0]}"  # show the first item
echo "${myarray[@]}"  # get the whole array, most used in for loop
echo "${#myarray[@]}"  # get the amount of items
echo "${!myarray[@]}"  # get the index of items

6. String

#!/bin/bash 
 
mylongstr="this is a long string"  # initialization
 
echo "My string: ${mylongstr}"  # print string
echo ""
 
echo "Number of characters in string: ${#mylongstr}"  # print length of string
echo ""
 
echo "Splitting my string like an array:"  # split string by space and print
for word in ${mylongstr[@]}; do
    echo "${word}"
done
echo ""

7. Arithmetic

#!/bin/bash 
 
a=2
b=3
 
mysum=$((a+b))  # arithmetic operation must use double parenthesis!!
echo "Sum of a=${a} and b=${b} is ${mysum}"

8. Conditional Statement

#!/bin/bash 

A=1
 
if [ $((A)) -eq 0 ]; then
    echo "A equals to 0"
elif [ $((A)) -gt 0 ]; then
    echo "A is greater than 0"
else
    echo "A is smaller than 0"
fi
#!/bin/bash 
 
mystr="This is an OS course"
 
if [ -z "${mystr}" ]; then
  echo "Ops... the string is empty."
else
  echo "The string is not empty."
fi
#!/bin/bash 
 
if [ -f example.txt ]; then
  echo "File example.txt exists."
else
  echo "Ops... example.txt does not exist."
fi
Operator Description
-eq Returns true if two numbers are equivalent
-ne Returns true if two numbers are not equivalent
-lt Returns true if a number is less than another number
-gt Returns true if a number is greater than another number
-le Returns true if a number is less than or equal another number
-ge Returns true if a number is greater than or equal another number
== Returns true if two strings are equivalent
!= Returns true if two strings are not equivalent
! Returns true if the expression is false
-z Check if a string is empty
-d Check the existence of a directory
-e Check the existence of a file
-r Check the existence of a file and read permission
-w Check the existence of a file and write permission
-x Check the existence of a file and execute permission

9. Loop

#!/bin/bash 
 
A=("a" "b" "c")
 
# print 1 to 10
for i in {1..10}; do
  echo "${i}"
done
 
# print a to c
for char in ${A[@]}; do
  echo "${char}"
done
#!/bin/bash 
 
A=0
 
# prints 0 to 9, with each number on a new line.
while [ $((A)) -lt 10 ]; do
  echo $((A))
  (( A++ ))
done

10. IO Argument

#!/bin/bash 
 
echo "You called $0, with"
 
if [ $# -eq 0 ]; then
    echo "no arguments..."
    exit 0
fi
 
counter=0
for i in "$@"; do
    (( counter++ ))
    echo "Arg[${counter}]: ${i}"
done
  1. The input arguments are obtainable from $@
  2. The number of arguments is obtainable from $#
  3. To specify the n-th argument, use $n, e.g. first argument is $1 while $0 is a special argument that stores the name of the script

11. Shell Command

#!/bin/bash 
 
# capture shell command. 
output=$(ls)
echo ""
echo "Output of ls: ${output}"  # execute the command
 
# where is the exit status? 
echo ""
haha; echo "haha gives $?";
 
echo ""
echo "hello_world"; echo "echo gives $?"
  1. Note that the syntax $(command) means executing command (which is different from $((expression)) for evaluating arithmetic expressions)
  2. The exit status of the last executed command is always stored in $?

12. Function

#!/bin/bash 
 
# need a space between function name and '{' !
function addition {  
  result=$(($1 + $2))
}
 
function main {
    local a=1
    local b=2
    result=
    addition ${a} ${b}
    echo "${a}+${b}=${result}"
}
 
main  # need a start point

13. String Process

#!/bin/bash 
 
mystr="name.email.phone.remarks"
 
# use Internal Field Separator
IFS='.'
for word in ${mystr[@]}; do
  echo $word
done
 
# restore  IFS 
IFS=" "$'\n'$'\t'
#!/bin/bash 
 
# use awk library
while read line; do
  echo "${line}" | awk -F',' '{print $1" "$3}'
done < data.csv

随时更新~

上一篇:python常用函数


下一篇:关于keyframes的用法