一、运行原理

    Shell 是用户和Linux系统之间进行交互的接口程序,是一组机器可以理解的指令集,并通过用户的指令集来实现用户所需要的功能,原理如下图:

    wKiom1X5b1rznhKDAAD34xPMZ9E026.jpg

   一般格式:为以".sh"为结尾的文件,并以#!/bin/bash头起顶格写,以#开头为注释文件,有时,根据具体情况,以及权限、运行环境的不同会在系统启动时(/etc/fstab),系统特定时间运行特定的bash(crontab -e),并且在一个shell中一般注明脚本的作者,版本,用途等备注信息

linux 进程、执行方式、程序、编程元素

http://canshan.blog.51cto.com/2613522/1695620

Linux 脚本 命令状态 条件测试

http://canshan.blog.51cto.com/2613522/1695858

Linux shell的条件判断、循环语句及实例

http://canshan.blog.51cto.com/2613522/1696292

linux 函数

http://canshan.blog.51cto.com/2613522/1696378

linux sed awk

http://canshan.blog.51cto.com/2613522/1696411


1、如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型

wKiom1X-n8aw3QOdAAJgJgkeG0Y724.jpg

2、断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;(使用read)

[root@iZ28qzns9m4Z mageshell]# sh -n 1number.sh 
[root@iZ28qzns9m4Z mageshell]# sh -x 1number.sh 
+ read -t 10 -p 'please input two number: ' num1 num2
please input two number: 1
+ '[' -z 1 ']'
+ '[' -z '' ']'
+ echo 'please input other one'
please input other one
+ exit 1
[root@iZ28qzns9m4Z mageshell]# sh -x 1number.sh 
+ read -t 10 -p 'please input two number: ' num1 num2
please input two number: 1 2
+ '[' -z 1 ']'
+ '[' -z 2 ']'
+ '[' 1 -ge 2 ']'
+ echo 'Max: 2,Min: 1'
Max: 2,Min: 1
[root@iZ28qzns9m4Z mageshell]# cat 1number.sh 
#!/bin/bash
read -t 10 -p "please input two number: " num1 num2
if [ -z "$num1" ] ||[ -z "$num2" ]; then
	echo "please input other one"
	exit 1
fi
if [ $num1 -ge $num2 ]; then
	echo "Max: $num1,Min: $num2"
else
	echo "Max: $num2,Min: $num1"
fi
[root@iZ28qzns9m4Z mageshell]#

3、求100以内所有奇数之和

①[root@iZ28qzns9m4Z mageshell]# sh 1sum.sh 
2500
[root@iZ28qzns9m4Z mageshell]# cat 1sum.sh 
#!/bin/bash
declare -i sum=0
for i in {1..100..2}; do
		sum=$[ $sum+$i ]
done
echo $sum
[root@iZ28qzns9m4Z mageshell]# sh -x 1sum.sh
②[root@iZ28qzns9m4Z mageshell]# sh 2sum.sh 
sum:2500
[root@iZ28qzns9m4Z mageshell]# cat 2sum.sh 
#!/bin/bash
sum=0
for i in $(seq 1 2 100)
do
	let "sum=sum+i"
done
echo "sum:$sum"
[root@iZ28qzns9m4Z mageshell]#
③+ '[' 101 -lt 100 ']'
+ echo 2500
2500
[root@iZ28qzns9m4Z mageshell]# cat 3sum.sh 
#!/bin/bash
declare -i sum=0
declare -i i=1
while [ $i -lt 100 ]; do
	let sum+=$i
	let i+=2
done
echo $sum
[root@iZ28qzns9m4Z mageshell]#

注:seq 是Linux 中一个预设的外部命令,一般用作一堆数字的简化写法。

参数:

-f, --format=FORMAT  use printf style floating-point FORMAT (default: %g)

-s, --separator=STRING use STRING to separate numbers (default: \n)

-w, --equal-width  equalize width by padding with leading zeroes

-f 最常用 , 例如一次制做 10 个名 dir001 , dir002 .. dir010 的目录 mkdir $(seq -f 'dir%03g' 1 10)

[root@iZ28qzns9m4Z mageshell]# mkdir $(seq -f 'dir%03g' 1 10)
[root@iZ28qzns9m4Z mageshell]# ls
1file2.sh   1sum.sh  dir001  dir003  dir005  dir007  dir009
1number.sh  2sum.sh  dir002  dir004  dir006  dir008  dir010

-s 选项主要改变输出的分格符, 预设是 \n , 就是 newline

[root@iZ28qzns9m4Z mageshell]# seq  1 2 100
1
3
5
7
9
11
13
15

4、写一个脚本实现如下功能:

(1) 传递两个文本文件路径给脚本;

(2) 显示两个文件中空白行数较多的文件及其空白行的个数;

(3) 显示两个文件中总行数较多的文件及其总行数;

[root@iZ28qzns9m4Z mageshell]# sh 2file.sh 
plz input two file:aa.txt bb.txt
max is: bb.txt
space is 4
bbbbbbbbbbbbbbbbbbbbbbb

bbbbbbbbbbbbbbbbbbbbbbb

bbbbbbbbbbbbbbbbbbbbbbb

bbbbbbbbbbbbbbbbbbbbbbb

bbbbbbbbbbbbbbbbbbbbbb
[root@iZ28qzns9m4Z mageshell]# cat 2file.sh 
#!/bin/bash
read -t 40 -p "plz input two file:" file1 file2
grep1=` grep "^$" $file1 | wc -l` 
grep2=` grep "^$" $file2 | wc -l` 
if [ $grep1 -gt $grep2 ]; then
	echo "max is:" $file1
	echo "space is $grep1"
else
	echo "max is:" $file2
	echo "space is $grep2"
fi 
if [ `cat $file1 | wc -l` -gt `cat $file2 | wc -l` ]; then
	echo "` cat $file1 `"
else
	echo "` cat $file2 `"
fi 
[root@iZ28qzns9m4Z mageshell]#


5、写一个脚本

(1) 提示用户输入一个字符串;

(2) 判断:如果输入的是quit,则退出脚本;否则,则显示其输入的字符串内容;

[root@iZ28qzns9m4Z mageshell]# sh -x bx1.sh 
+ read -t 50 -p 'input a nstring:' string
input a nstring:aaaaaaa
+ '[' aaaaaaa == quit ']'
+ echo aaaaaaa
aaaaaaa
[root@iZ28qzns9m4Z mageshell]# sh bx1.sh 
input a nstring:aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
[root@iZ28qzns9m4Z mageshell]# sh bx1.sh 
input a nstring:quit
thanks
[root@iZ28qzns9m4Z mageshell]#

打印2^n表;n等于一个用户输入的值

不是太理解,看的同学的

[root@iZ28qzns9m4Z mageshell]# sh 1number1.sh 
input a number:4
1
2
2x2=4
2x2x2=8
2x2x2x2=16
[root@iZ28qzns9m4Z mageshell]# sh -x 1number1.sh 
+ read -t 50 -p 'input a number:' number
input a number:3
+ count=2
++ seq 0 3
+ for i in '$(seq 0 $number)'
+ '[' 0 -eq 0 ']'
+ echo -e 1
1
+ for i in '$(seq 0 $number)'
+ '[' 1 -eq 0 ']'
+ '[' 1 -eq 1 ']'
+ echo -e 2
2
+ for i in '$(seq 0 $number)'
+ '[' 2 -eq 0 ']'
+ '[' 2 -eq 1 ']'
+ '[' 2 -gt 1 ']'
+ count+=x2
+ echo 2x2=4
2x2=4
+ for i in '$(seq 0 $number)'
+ '[' 3 -eq 0 ']'
+ '[' 3 -eq 1 ']'
+ '[' 3 -gt 1 ']'
+ count+=x2
+ echo 2x2x2=8
2x2x2=8
[root@iZ28qzns9m4Z mageshell]#

写一个脚本,写这么几个函数:函数1、实现给定的两个数值的之和;函数2、取给定两个数值的最大公约数;函数3、取给定两个数值的最小公倍数;关于函数的选定、两个数值的大小都将通过交互式输入来提供。

想了很久,没有思路,,,但会继续更新。。请关注