Linux——shell基础实践1

1.编写 shell 脚本 p1.sh,完成向用户输出“Hello!”的问候语。并根据实验的时间,分别给出:“上午好!”或者“下午好!”或者“晚上好!”的问候。提示:使用 date 取得当前的时间,并对 date 进行格式化取得当前时间中的小时,根据当前的小时来判断上午、下午还是晚上。1-11 点上午,12-18 点下午,19-24 点晚上。

涉及到的命令有:

data:获取当前时间

变量的定义和使用

if 分支判断

大小判断

echo 输出

# 获取当前时间,格式化获取小时。
hour_now="`date '+%H'`";
echo $hour_now
echo "hour now: $hour_now";
# if 分支判断,注意[]和变量之间需要留空!
if [ "$hour_now" -ge "0" ]&&[ "$hour_now" -le "11" ]; then
	echo "Hello! Good morning!"
elif [ "$hour_now" -ge "12" ]&&[ "$hour_now" -le "18" ]; then
	echo "Hello! Good afternoon!"
elif [ "$hour_now" -ge "19" ]&&[ "$hour_now" -le "24" ]; then
	echo "Hello! Good evening!"
else 
	echo "ERROR!"
fi
========输出========
00
hour now: 00
Hello! Good morning!

2.编程完成 shell 脚本 p2.sh:如果存在 p1.sh 文件,则输出信息:p1.sh 文件已经存在,并询问是否允许?如果用户回答:要运行,那么给出运行结果;如回到不要运行,则退出程序。如果 p1.sh 不存在,则提示用户先创建文件并退出。

涉及到的命令有

if 分支判断

-f 查找文件

read 读取键盘输入

echo 输出

if [ -f ./p1.sh ] 
then 
	echo "The file exists. Do you want to excute p1.sh? (Y/N)";
	read opt;
	if [ $opt = Y ]
	then 
		echo "Read Y, excute p1.sh"
		echo "------p1.sh------"
		sh p1.sh
	else
		echo "Read N, exit."
	fi
else
	echo "The file doesn't exist, please create p1.sh first!"
fi
=======输出=======
The file exists. Do you want to excute p1.sh? (Y/N)
Y
Read Y, excute p1.sh
------p1.sh------
00
hour now: 00
Hello! Good morning!

3.编写 shell 脚本,按要求打印输出乘法口诀表,输出用两种方式完成:一种是直接在控制台输出;另一种是输出至文件 result.txt。

涉及到的命令:

循环语句

if 分支

文件创建、写入

#答案写入resul.txt
#echo > [FILENAME] 为写入,覆盖前文
#echo >> [FILENAME] 为续写,不覆盖前文

touch result.txt

for ((  i=1;i<=9;i++  ))
do
   for ((  j=1;j<=9;j++  ))
   do
      [  $j  -le  $i  ]  &&  echo -n "${i}*${j}=$((i*j))      " >> result.txt   
   done
   echo "" >> result.txt                   
done

More:

在运行shell脚本时,一开始使用sh [FILENAME],前两个脚本可以运行,但是第三个无法运行。

改进方式:应该使用 bash [FILENAME]

sh 与 bash的区别:

sh是bash的子集,sh功能单一,bash的语法更丰富。

sh一般设成bash的软链接(符号链接)

 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式。也就是说 /bin/sh 相当于 /bin/bash --posix

现在绝大部分UNIX-like系统中,/bin/sh和/usr/bin/sh一般都是链接文件,指向真正的默认Shell。所以,如果你写/bin/bash或是/usr/bin/bash,那么就一定会使用bash解释执行。而你写/bin/sh或/usr/bin/sh的话,就要看操作系统和发行版的默认Shell,或者如果没有使用默认Shell而是修改了默认设定的话,就不一定会是由bash解释执行了。

两种方式导致的问题:

  1. 如果写死bash的话,像是AIX和BSD类的系统中,Bash是不会默认安装的,这样会直接报错
  2. 如果写sh,让系统自行找到可用的shell,也可能会因为不同Shell的语法和功能不同导致问题,你自己要小心。

也就是说,我装的Ubuntu带了bash,但如果用sh就不会使用bash,导致无法编译成功。

你可能感兴趣的:(Linux,bash,linux)