linux sheel script demo

demo1 (输入/输出)

1.1. target :

    输入姓、名, 输出姓名

1.2. create directory

     mkdir ~/bin

1.3. create & edit sheel script

    vim fullname.sh

    note:  more comment is useful

#!/bin/bash
#Program
#       User inputs his first name and last name . Program shows his full name.
#History :
#2017/04/10     logan   First lease
PATH=/bin:$PATH #将当前目录加入系统环境
export PATH
read -p "Please input your firstname:" firstname
read -p "Please input your lastname:"   lastname 
echo -e "
Your full name is :" ${firstname} ${lastname}

 1.4. run

   [rocky@localhost bin]$ sh fullname.sh

demo2 (计算PI)

 2.1  target

       输入小数点后位数 输出PI

 2.2  create & edit

       vim cal_pi.sh

#!/bin/bash
#Program:
#       Usre input a scale number to calculate pi number.
#History:
#2017/04/10 logan       First lease
PATH=/bin:PATH
export PATH
echo -e "This program will calculate pi value. 
"
echo -e "You should input a float number to calculate pi value. 
"
read -p "This scale number (10-10000) ? " checking
num=${checking:-"10"}
echo -e "Starting calculate pi value. Be patient."
time echo "scale=${num}; 4*a(1)"|bc -lq

 2.3 run

      输入 5

      输出  3.14156

demo3 ($#  $@  $* 的使用)

 3.1 target

       输入参数, 显示相关结果

 3.2  create & edit sheel

       vim how_paras.sh

#!/bin/bash
#Program:
#       Program shows the script name, parameters
#History:
#2017/04/11     logan   First release
PATH=/bin:$PATH
export PATH

echo "The script name is        ==> ${0}"
echo "Total parameter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && eexit 0
echo "Your whole parameter is  ==> '$@'"
echo "The 1st parameter         ==> ${1}"
echo "The 2nd parameter         ==> ${2}"

  3.3  run

[logan@localhost bin]$ sh how_paras.sh zhang li wang
The script name is    ==> how_paras.sh
Total parameter number is ==> 3
Your whole parameter is  ==> 'zhang li wang'
The 1st parameter        ==> zhang
The 2nd parameter        ==> li

 demo4 (shift 使用)

4.1 vim how_shift.sh

.....#省略注释 PATH......
echo "The script name is        ==> ${0}"
echo "Total parameter number is ==> $#"
[ "$#" -lt 6 ] && echo "The number of parameter is less than 6. Stop here." && eexit 0
echo "Your whole parameter is  ==> '$@'"
shift
echo "------------------shift one--------"
echo "Total parameter number is ==>$#" 
echo "The whole parameter is  $@"
shift 3
echo "------------------shift three------"
echo "Total parameter number is ==>$#"
echo "the whole parameter is ==> $@"

4.2 run

[logan@localhost bin]$ sh how_shift.sh one two three four five six
The script name is    ==> how_paras.sh
Total parameter number is ==> 6
Your whole parameter is  ==> 'one two three four five six'
------------------shift one--------
Total parameter number is ==>5
The whole parameter is  two three four five six
------------------shift three------
Total parameter number is ==>2
the whole parameter is ==> five six
[logan@localhost bin]$ vim how_paras.sh

demo5 (if 条件判断式)

5.1 vim  if_fi.sh

#!/bin/bash
#Program:
#       This program shows the user's choice
#History:
#20170411       logan   first release
PATH=/bin:$PATH
export PATH

read -p "Please input (Y/N): " yn

if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ];then
        echo "OK, continue"
        exit 0
fi

if [ "${yn}" == "N" ] || [ "${yn}" == "n" ];then
        echo "Oh, interrupt!"
        exit 0
fi

echo "I don't know what your choice is" && exit 0

note:  中括号内 变量及字符两边需要空格符,否则报错 '找不到命令'

5.2 run

     sh if_fi.sh

demo6 (日期计算)

6.1 vim cal_retired.sh

#!/bin/bash
#Program:
#       You input your demobilization date, I calculate how many days before you demobilize.
#History:
#2017/04/12     logan           first release
PATH=/bin:$PATH
export PATH

#1. tell user the function of the shell script, and the format of the date
echo "This program will try to calculate:"
echo "How many days before your demobilization date..."
read -p "Please input your demobilization date (YYYYMMDD ex>20131230): " date2

#2. test the comment you just input with the Pattern
date_d=$(echo ${date2} |grep '[0-9]{8}') # check length whether 8 of the input num
if [ "${date_d}" == "" ];then
        echo "You input the wrong date format...."
        exit 1
fi

#3. begin to calculate the date
declare -i date_dem=$(date --date="${date2}" +%s) #seconds count of the input date
declare -i date_now=$(date +%s)                   #seconds count date now
declare -i date_total_s=$((${date_dem}-${date_now})) #differ from the two date
declare -i date_d=$((${date_total_s}/60/60/24))     #transfer to days
if [ "${date_total_s}" -lt "0" ];then
        echo "You had been demobization before: " $((-1*${date_d})) " days ago"
else
        declare -i date_h=$(($((${date_total_s}-${date_d}*60*60*24))/60/60))
        echo "You will demobilize after ${date_d} days and ${date_h} hours."
fi

 6.2 run

    sh cal_retired.sh

   

demo7 (case..esac)

7.1 vim hello-3.sh

#!/bin/bash
#Program:
#       Show "Hello" from $1.... by using case .... esac
#History:
#2017/04/12     logan   First lease
PATH=/bin:$PATH
export PATH

case ${1} in
   "hello")
        echo "Hello, how are you?"
        ;;
   "")
        echo "You MUST input parameters, ex> {${0} someword}"
        ;;
   *)
        echo "Usage ${0} {hello}"
        ;;

esac
      

7.2 run

  sh hello-3.sh

demo8 (function使用)

vim demo.sh

#!/bin/bash
#Program:
#       Show "one two three" from $1.... by using case .... esac
#History:
#2017/04/12     logan   First lease
PATH=/bin:$PATH
export PATH

function printit(){
        echo -n "Your choice is " #-n means not enter to next line
}

case ${1} in
   "one")
        printit; echo ${1} | tr 'a-z' 'A-Z' #transfer to Upper
        ;;
   "two")
        printit; echo ${1} | tr 'a-z' 'A-Z' #transfer to Upper
        ;;
   "three")
        printit; echo ${1} | tr 'a-z' 'A-Z' #transfer to Upper
        ;;
   *)
        echo "Usage ${0} {one|two|three}"
        ;;

esac

8.2 run

 sh demo.sh one

demo9

9.1 vim while_do_done.sh

#!/bin/bash
#Program:
#       Repeat question until user input correct answer.
#History:
#2017/04/12     logan   first release
PATH=/bin:$PATH
export PATH

while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
do
        read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

9.2 run

 sh while_do_done.sh

demo10

10.1 vim add_1_to_100.sh

#!/bin/bash
#Program:
#       calculate the sum of num 1,2...100
#History:
#2017/04/12     logan   first release
PATH=/bin:$PATH
export PATH

s=0
i=0
while [ "${i}" != "100" ]
do
        i=$(($i+1))
        s=$(($s+i))
done
echo "The result of '1+2+3...+100' is ==> $s"

10.2 run

 sh add_1_to_100.sh

10.3 vim add_1_to_num.sh

#!/bin/bash
#Program:
#       calculate the sum of num 1,2...100
#History:
#2017/04/12     logan   first release
PATH=/bin:$PATH
export PATH

s=0
i=0
j=0
while   [ "${j}" -le "0" ]
do
        read -p "Please input the num: " j
done
while [ "${i}" != "${j}" ]
do
        i=$(($i+1))
        s=$(($s+i))
done
echo "The result of '1+...+ ${j}' is ==> $s"

 demo11

11.1 vim for_test.sh

#!/bin/bash
PATH=/bin:$PATH
export PATH

for animal in dog cat elephant
do
        echo "There are ${animal}s..."
done

11.2 sh for_test.sh

demo12

12.1 target

ping 局域网内 192.168.1.1~100的看通不通, seq(sequence)指令的使用

12.2 vim pingip.sh

#!/bin/bash
#Program
#       Use ping command to check the network's PC state
#History
#2017/04/14     logan   first release
PATH=/bin:$PATH
export PATH

network="192.168.1"
for sitenu in $(seq 1 100) #seq 为 sequence(连续)的缩写
do
        ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1
        if [ "${result}" == 0 ];then
                echo "Server ${network}.${sitenu} is UP."
        else
                echo "Server ${network}.${sitenu} is DOWN."
        fi
done

12.3 run

 sh pingip.sh

demo13

13.1 target

判断式(test)的使用

13.2 vim dir_perm.sh

#!/bin/bash
#Program
#       User input dir name, I find the permission of files.
#History:
#2017/04/14     logan   first release
PATH=/bin:$PATH
export PATH

read -p "Please input a directory: " dir
if [ "${dir}" == "" -o ! -d "${dir}" ]; then
        echo "The ${dir} is NOT exist in your system."
        exit 1
fi

filelist=$(ls ${dir})
for filename in ${filelist}
do
        perm=""
        test -r "${dir}/${filename}" && perm="${perm} readable"
        test -w "${dir}/${filename}" && perm="${perm} writable"
        test -x "${dir}/${filename}" && perm="${perm} executable"
        echo "The file ${dir}/${filename}'s permission is ${perm} "
done

13.3 run

  sh dir_perm.sh

demo14

14.1 description

     for循环的使用

14.2 vim cal_1_nu.sh

#!/bin/bash
#Program
#       Try do calculate 1+2+..+ ${your_input}
#History:
#2017/04/14     logan   first release
PATH=/bin:$PATH
export PATH

read -p "Please input a number, I will count for 1+2..+ your_input:" nu

s=0
for (( i=1; i<=${nu}; i=i+1))
do
        s=$((${s}+${i}))
done
echo "The result of '1+2+...${nu}' is ==> ${s}"

demo15

15.1 target

  随机选择3种菜

15.2 vim what_to_eat3.sh

#!/bin/bash
#Program
#       Try do tell you what you may eat.
PATH=/bin:$PATH
export PATH

eat[1]="zhang san ji"
eat[2]="li si ji"
eat[3]='wang wu ji'
eat[4]="zhang liu ji"
eat[5]="qian qi ji"
eat[6]="hao 1"
eat[7]="hao 2"
eat[8]="hao 3"
eat[9]="hao 4"
num=9

count=0
while [ "${count}" -lt 3 ]; do
        check=$(( ${RANDOM} * ${num} / 32767 + 1 ))
        flag=0
        if [ "${count}" -ge 1 ];then
                for i in $(seq 1 ${count} )
                do
                        if [ "${selectedNum[$i]}" == $check ];then
                                flag=1
                        fi
                done
        fi
        if [ ${flag} == 0 ];then
                echo "You mat eat ${eat[${check}]}"
                count=$((${count} + 1 ))
                selectedNum[${count}]=${check}

        fi
done

demo16 (计算生日)

16.1 vim birthday_howlong.sh

#!/bin/bash
#Program
# how many days your birthday remain
#History
#2017/04/17     logan   first release
read -p "Please input your birthday (MMDD, ex>0709): " bir
now=`date +%m%d`
if [ "$bir" == "$now" ];then
        echo "Happy birthday to you!!!"
elif [ "$bir" -gt "$now" ];then
        year=`date +%Y`
        total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
        echo "Your birthday will be $total_d later"
else
        year=$((`date +%Y`+1))
        total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
        echo "Your birthday will be $total_d later"
fi

demo17 (show accounts)

17.1 vim show_account.sh

#!/bin/bash
accounts=`cat /etc/passwd | cut -d':' -f1`
for account in $accounts
do
        declare -i i=$i+1
        echo "The $i account is "$account" "
done
原文地址:https://www.cnblogs.com/rocky-fang/p/6689592.html