第十二章、学习shell脚本

以下皆为实践题,请自行编写出程序

  1. 请建立一个脚本,当你执行该脚本的时候,该脚本可以显示:(1)你目前的身份(用 whoami) (2)你目前所在的目录(用pwd)
#!/bin/bash
who am i
pwd
exit 0

  1. 请自行编写一个程序,该程序可以用来计算【你还有几天可以过生日】?
#!/bin/bash
echo -e "计算你还有几天可以过生日"
read -p "输入你的生日,格式 MMDD:如0402" day1
# 判断day1的输入格式是否正确
day=$( echo ${day1} | grep '[0-9]\{4\}') # 看看是否是4位数字
if [ "${day1}" == "" ]; then
    echo "你输入的日期有误"
    exit 1
fi
# 开始计算日期
year=$(date +%Y)
day1="${year}${day}"  # $()加不加双引号都可以
date_now=$(date +%s)
date_birth=$(date --date="${day1}" +%s)
date_total_s=$((${date_birth}-${date_now}))
if [ "${date_total_s}" -lt "0" ]; then
    year=$((${year}+1))
    day1="${year}${day}"  
    date_now=$(date +%s)
    date_birth=$(date --date="${day1}" +%s)
    date_tital_s=$((${date_birth}-${date_now}))
fi
date_d=$((${date_total_s}/60/60/24))
date_h=$(($((${date_total_s}-${date_d}*60*60*24))/60/60))
echo "你还有${date_d}${date_h}小时过生日"
  1. 让用户输入一个数字,程序可以由1+2+3+…一直累加到用户输入的这个数字为止。
#!/bin/bash
read -p "输入一个大于0的整数n:" n
# 判断输入的是否是数字
num=$(echo ${n} | grep '[0-9]\{1,\}')
if [ "${num}" == "" -o  "${num}" == "0" ]; then
    echo "你输入的数字有误"
    exit 1
fi
# 开始计算
s=0
for ((i; i<=${n}; i=i+1))
do
    s=$((${s}+${i}))
done
echo "${n}的累加和为${s}"

  1. 编写一个程序,它的作用是:(1)先查看一下 /root/test/logical这个名称是否存在;(2)若不存在,则建立一个文件,使用touch来建立,建立完成后退出; (3)如果存在的话,判断该名称是否为文件,若为文件则将之删除后建立一个名为logical的目录之后退出;(4)如果存在,而且该名称为目录,则删除此目录
#!/bin/bash
# 前提:/root/test这个目录一定存在
# read -p "输入一个待查询的目录:" path
path=/root/test/logical

test -e ${path} && res=1 || res=0
if [ "${res}" == "0"  ] ; then
    touch ${path}
    echo "该名称不存在,已创建同名文件"
    exit 0
fi

test -f ${path} && res=1 || res=0
if [ "${res}" == "1"  ] ; then
    rm ${path}
    mkdir ${path}
    echo "该名称存在,且为文件,已被删除,创建同名目录"
    exit 0
fi

rmdir ${path}
echo "该名称存在,且为目录,已被删除"
exit 0

  1. 我们知道/etc/passwd里面以:来分隔,第一栏为账号名称。请写一个程序,可以将/etc/passwd的第一栏取出来,而且每一栏都以一行字符串【The 1 account is “root”】来显示,那个1表示行数。
names=$(cat /etc/passwd | cut  -d ":" -f1)
i=1
for name in ${names}
do
    echo "The ${i} account is ${name}"
    i=$((${i}+1))
done
exit 0

Logo

更多推荐