1. 程式人生 > >Commonly Used Code Snippets

Commonly Used Code Snippets

NPU ESS lease overflow uid error: ash put i++

This blog collects the commonly used code snippets based on my daily work, also do summary from related stackoverflow topics.

################################################################

if condition statements

list of bash condition statements

# sth does not exist?
if [[ "${sth}""X" == "X" ]]; then
  LogMsg "###### INFO: ..."
fi
# directory does not exist?
if [[ ! -d "${folder_path}" ]]; then
   LogMsg "###### ERROR: ${folder_path} directory doesn't exist!"
   exit 1
fi

script input parameters

Usage()
{
  echo
  echo "Usage $0 ..."
  echo "For example: ..."
}

if [ $# -eq 0 ]
then
  echo "No command-line arguments were specified..."
  Usage
  exit 1
fi

while [ $# -gt 0 ]
do
  case "$1" in
    -flag1)
       shift
       <var1>=${1}
       shift;;

    -flag2)
       shift
       <var2>=${1}
       shift;;

    *) Usage
       exit 1;;
  esac
done

log message

LogMsg()
{
  logMsg="$@"
  echo "["`date +"%Y/%m/%d %r"`"]" ${logMsg}
}
LogMsg "###### INFO: ..."
LogMsg "###### WARNING: ..."
LogMsg "###### ERROR: ..."

check last command result

echo_success_failure() {
  if [ $? -eq 0 ]; then 
    LogMsg "###### INFO: Success..."
  else 
    LogMsg "###### INFO: Failure..."
  fi
}

run as root

effective_uid=`id -u` 2>/dev/null
if [ $effective_uid -ne 0 ]; then
 LogMsg "###### ERROR: Please run this script as root or sudo"  
 exit 1
fi

delimited string to array

convert delimited string to array, for example:

string="item1 item2 item3"
IFS=' ' read -a array <<< "${string}"

this version has no globbing problem, the split character is set in $IFS (here is space), variables quoted.

${array[0]}  ===> item1
${array[1]}  ===> item2
${array[2]}  ===> item3

don‘t forget to do sanity check after converting.

loop array

declare -a array=("element1" "element2" "element3")
for i in "${array[@]}"
do
   echo "${i}"
done

declare or typeset are an explicit way of declaring variable in shell scripts.

In BASH it is safer to quote the variable using "" for the cases when $i may contain white spaces or shell expandable characters.

if you want to use index of array element

# get length of an array
arraylength=${#array[@]}

# use for loop to read all values and indexes
for (( i=0; i<${arraylength}; i++ ));
do
  echo $i " / " ${arraylength} " : " ${array[$i]}
done

chmod

chmod recursively for directory and it‘s content

chmod -R 0755 <target directory>

only add executable for file not folder

find . -name '<file name>' -type f | xargs chmod +x
-rwxr-xr-x ...

pass parameters in script

# invoke, must stick to this format
echo "admin
admin" | ./script.sh
# receive code snippet in script.sh
MsgLog "###### Please enter args1  ..."
read args1
LogMsg "###### Please enter password ..."
read -s password
${args1}     ===> admin
${password}  ===> admin

Note: read -s flag: do not echo input coming from a terminal, used for password

setup ssh password-less

ssh-keyscan -H ${remote} >> ~/.ssh/known_hosts
sshpass -p "<password>" ssh-copy-id -i ~/.ssh/id_rsa.pub root@${remote}
if [[ $? -ne 0 ]]; then
  LogMsg "######ERROR: Something went wrong with ssh-copy-id. Check for incorrect credentials ... "
  exit 1
fi

reinvoke

if [[ $? -ne 0 ]]; then
     LogMsg "######ERROR: Something went wrong… "
     <shell function name>
fi

Commonly Used Code Snippets