最近我们在学shell编程,就写几个自己慢慢学习shell编程的博客以作记录,先定个小目标,先写100个
1. 使用for循环,dir1文件夹中文件复制到dir2文件夹中
for i in dir1/*
do
cp $i dir2
done
其中dir/*表示dir文件下所有文件
2. 使用for循环的两个注意点
for i in $*
do
echo $i
done
for i //没有 in 和 文件正则表达式
do
echo i
done
$*表示传入的所有位置参数
比如 ,我是用这个程序时传入参数是 斜杠 星号 斜杠 星号 斜杠 星号 则显示根目录下所有的三级目录
第二个脚本和第一个等价
3.这里插入一下bash的语法形式
bash shell脚本 参数1 参数2
bash >shell脚本
4.使用for循环打印*,第一行一个,第二行两个,递增,输出行数由外部输入决定
for((i=1;i<=$1;i++))
do
for((j=1;j<=i;j++))
do
echo -n "*"
done
echo
done
你会发现
- 这个shell脚本和C语言编程的不同点 for循环很相似,但是是两个括号
- echo函数后面跟了一个-n
- 第一个函数done后 ,后面还跟了一个echo
- *号我特意加了""
注释:(我自己实验之后给自己看的,最好自己试验一下)
5. -n表示和后行连接
6. echo函数自动默认换行,即每次都是另起一行开始输出
7. -n后跟一个echo表示后面连接一个空白行,即换行
5. mv命令 ,我们一般都知道mv命令是用来移动文件的,但是,如果,移动的目标位置不存在,那么意味着什么呢? 意味着创建了一个新文件,把原文件中的所有东西移动到了新文件中,相当于改变了文件名
【格式】mv 原文件名 新文件名
6. while循环
while [ -f $1 ]
do
echo $1 is a file
shift
done
本来觉得这是一个对的程序,首先while循环$1是否为文本文件,如果是,执行输出
$1 is a fiel
但是这是一个错误的程序
while [ $1 ]
do
if [ -f $1 ]
then
echo $1 is a file
else
echo $1 isnt a file
fi
shift
done
这才是正确的代码,具体什么情况,我也不太清楚,上面错误代码,最后会无限输出,is a fiel
(补充:今天我又试了一下,我发现只要最后输入的参数值时不符合条件的,就不会有无限输出的情况,可能是while循环没有办法shift出来,等同于while(ture)无限循环,先注意一下吧;)
不过要注意的是,正确代码段,与两个中括号,其中都要注意两边要带空格,否则会给出错误提示
7.这里补充一下数值测试运算符(-eq,-ne, -lt, -le, -gt, -ge)
shell 中不存在 >=, <=, = 等运算符,所有的运算符都被上面的字符组合替代
其中 -eq 是 equal 也就是等于
-ne 是 no equal 就是不等于
-lt 是 less than 就是小于
-le 是less equal 就是小于等于
剩下的类推