引言:上篇文章简单的说了一下条件判断语句的应用,也就是基本的语法。接下来说一下进阶版的用法和一些例子。在说例子之前先扩充一下知识,对咱们理解有很大的帮助,那就开始吧
shell里面的双引号, 单引号,反引号之间的区别:
单引号:就是里面所有的内容都是字符串,是什么就输出什么,转义字符时原样输出
双引号:里面的内容如果有变量,会先解析变量。有转义字符,解析转义字符
反引号:将里面的结果放入变量中,下面是个小栗子
#!/bin/bash
# 此语句的意思是查看当前目录内容,找到最后一个名字赋值给x
x = `ls | tail -1`
echo $x
将上面shell执行,输出一下会发现这样的结果
awk的使用
首先介绍一下awk是干什么的,这是一个报告生成器。是一种编程语言,用来格式化数据,把内容整理成我们想要的样子,可以理解成变成表格的样子,方便阅读。一般用法为awk [options] ‘Pattern{Action}’ file。这里options:选项,Pattern:模式,Action:动作,这里为了简单描述,就不带前两个了,直接说action,常用的命令就是print用来格式化输出。举个小栗子
这个来解释一下。如果不加awk后面的内容是什么呢,让我们来看一下
可以看到一共三行的内容,awk的作用是对每一行进行操作的,后面的$8是每行的默认按空格分第8列,第一行没有第8列,所以是空的
好的咱们的准备知识已经准备完成了,接下来进入实际操作的内容,需求为:进入一个目录,该目录有很多要打开的子目录,子目录前面有数字标号,我想按数字进入相应的子目录。需求还是很简单的,我们开始写吧,大家按照自己实际的目录写,我的和你们不一样
#!bin/bash
# 首先要进入该目录,我进入的是根目录下的usr目录
cd /usr
# 设置两个变量,x为前面显示的数字,y为数组的下标,数组为li
x=1y=0# 下面是一个for循环,将d开头的内容也就是目录显示出来,每行按第9列输出为i
for i in `ls -l | grep ^d | awk '{print $9}'`
# 下面是对每一行的具体操作
do{
# 前面数字,后面目录名
echo "$x: $i"
# 将目录名存入数组li中
li[$(($y))]=$i
# x+1
x=$(($x+1))
# y+1
y=$(($y+1))
}
done
# 下面的内容是进入具体的目录的操作
while true
do
echo 'please input a number:'
# 输入数字
read inde_x
# 判断最大数字是否小于等于目录数,小于继续进入目录,大于重输
if [ $(($inde_x)) -le $(($x-1)) ];then
cd ${li[$(($inde_x-1))]}
break
else
echo "please input correct number"
fi
done
上面就是简单的例子,这个操作要用source命令,因为要同步进入目录,其他方式是异步进入,当前文件所在路径是没有变的,大家可以试一下。如果是root账号,这个脚本一般放到/root目录下,也就是root账号的家目录,因为如果有问题的话可以直接使用命令cd到家目录再次执行。
这次的例子虽然内容少,但知识点还是很多的,可以尝试着去读,没有接触过的shell命令也可以提前接触一下。
这次到这里了,下次再见。