Shell积累

1.shift命令

shift参数将所有参数变量左移一个位置,使$2变为$1,$3变为$2,…依此类推,但$0不变。

1
2
3
4
5
6
7
8
#!/bin/bash
echo $0
echo $1
echo $2
shift
echo $0
echo $1
echo $2

运行:

1
sh test.sh 1 2 3

结果:

1
2
3
4
5
6
test.sh
1
2
test.sh
2
3

2.输出到文件

shell编程输出分为两种,一种直接打印在控制台,另一种输出到文件中(即输出重定向),输出到文件中用“>”字符输出。
“>”后面直接跟文本文件名,如果不存在,自动创建;如果已经存在则覆盖;
“>>”追加到文件中。
输出符后面加”!”,将命令执行结果输出到文件;
输出符后面加”&”,将所有显示信息输出到文件;

Shell学习(练习题解析)

练习题网址百度文库

1.编写一个shell脚本,完成功能

1)显示文字“Waiting for a while…”;
2)长格式显示当前目录下面的文件和目录,并输出定向到/home/yuegang02/file.txt文件;
3)定义一个变量,名为s,初始值“Hello”;
4)使该变量输出重定向到/home/yuegang02/string.txt。
代码:
1)

1
2
#!/bin/bash
echo "Waiting for a while ..."

2)

1
2
#!/bin/bash
ls -al > /home/yuegang02/file.txt

3)

1
2
#!/bin/bash
s=Hello

4)

1
2
3
#!/bin/bash
s=Hello
echo s > /home/yuegang02/string.txt

2.批量复制操作

编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。
代码:

1
2
3
4
5
6
7
#/bin/bash
dir=$1
while [ $2 ]
do
cp $dir $2
shift
done

注意:shift用法

3.移动文件,并显示目录内容

编写一个shell脚本,利用for循环将当前目录下的.c文件移动到指定的目录,并按文件大小显示出移动后指定的目录的内容。

1
2
3
4
5
6
7
8
9
#/bin/bash
for name in `ls *.c`
do
if [ ! -d ./file_txt ] ;
then
mkdir ./file_txt
fi
cp ${PWD}/$name ./file_txt
done

Shell脚本基本语法

最近闲来无事拿起了一本shell编程的书,翻了翻感觉应该是不会太难,果断地安装了虚拟机,安装了linux系统,开始了shell脚本语言的学习。

简介

shell脚本与Windows/Dos下的批处理相似,也就是各类命令预先放入到一个文件中,方便一次性执行一个程序文件,但是他比Windows下的批处理更强大,比用其他程序编程的效率更高,因为他使用的是linux/unix命令。

基本语法

1.输出

1
2
3
#!/bin/bash
echo Hello,World!
printf Hello,World!

2.赋值

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
name=yueg
echo $name
x=1
echo $x
names=(yueg jingjing)
echo $names
names[0]=yuegang
names[1]=jingjing
echo $names

注意:

  1. 以上是多种赋值方式的例子,特别说明的是赋值的“=”前后不能留有空格,否则系统会识别为多个错误命令;
  2. 给数组赋值可以用()的形式将每个分量用空格隔开,还可以单独分别赋值。

3.控制流(条件判断)

  1. if语句
  2. case语句

if语句:

1
2
3
4
5
6
#!/bin/bash
if [1 -lt 2]
echo yes
else
echo no
fi

控制流的条件判断语句中条件判断分为多种:

  1. 数值判断

等于:-eq
不等于:-ne
大于:-gt
大于等于:-ge
小于:-lt
小于等于:-le

  1. 文件类别判断(不一一列出)
  2. 字符串判断

-z string 长度为0,结果为真
-n string 长度不为0,结果为真
string1 = string2 相等为真
string1 != string2 不相等为真

case语句

1
2
3
4
5
6
7
8
9
#!/bin/bash
case word in
pattern1)
list1
;;
pattern2)
list2
;;
esac

注意:

  1. case语句中pattern可以用通配符“*”进行模糊匹配;
  2. 注意每次匹配后的语法要求要有“;;”两个分号。

4.循环

  1. while
  2. until
  3. for
  4. select
  5. 循环控制