有关Shell命令的学习整理

一些Shell命令的练习

  • 2017/04/28
1
2
3
#!/bin/bash
#显示脚本中入参的个数
echo "All pat num:$#"
1
2
#显示所有的入参
echo "All par:$*"
1
2
#显示当前脚本的进程id
echo "The cut shell pid:$$"
1
2
#显示当前脚本名称
echo "Cur shell name:$0"
1
2
3
#显示执行结果
ls -l
echo "Run result:$?"
1
2
#显示前两个入参的值
echo "Par1:$1 Par2:$2"
1
2
3
4
5
6
v1=2012
echo "$v1"
echo $v1
v2="z x c"
echo "$v2"
echo $v2
1
2
3
#直接赋值
TestPar=1
echo "TestPar:$TestPar"
1
2
3
#shell命令执行结果赋值
CurDir=`pwd`
echo "CurDir:$CurDir"
1
2
3
#数值计算结果赋值
ParNum=10
ParNum=`Cur`
  • 2017/05/01

执行脚本

执行脚本

执行脚本


执行脚本

执行脚本

执行脚本


执行脚本

执行脚本

执行脚本


使用echo命名将环境变量中的PATH输出到一个名为path的文件里。

执行脚本

执行脚本


编写一个名为read.sh的脚本,使用read命令获取到从键盘上输入的内容,并将该内容显示出来。

执行脚本

执行脚本


编写一个名为search.sh的脚本,脚本的功能为查找/etc/passwd文件中以m开头的记录,并将结果输出到名为result的文件里。

执行脚本

执行脚本


编写一个名为length.sh的脚本,脚本的功能为使用read命令获取输入的字符串,并用expr length 计算字符串的长度。

执行脚本

执行脚本


编写一个名为substring.sh的脚本,脚本的功能为使用read命令获取输入的字符串,并用expr substr 抓取字符串。

执行脚本

执行脚本

  • 2017/04/29
  1. 取长度 练习代码如下:
1
2
3
4
str="abcd"
expr length $str   # 4
echo ${#str}       # 4
expr "$str" : ".*" # 4
  1. 查找子串的位置 练习代码如下:
1
2
3
4
5
str="abc"
expr index $str "a"  # 1
expr index $str "b"  # 2
expr index $str "x"  # 0
expr index $str ""   # 0
  1. 选取子串 练习代码如下:
1
2
3
4
5
6
7
8
str="abcdef"
expr substr "$str" 1 3  # 从第一个位置开始取3个字符, abc
expr substr "$str" 2 5  # 从第二个位置开始取5个字符, bcdef
expr substr "$str" 4 5  # 从第四个位置开始取5个字符, def
echo ${str:2}           # 从第二个位置开始提取字符串, bcdef
echo ${str:2:3}         # 从第二个位置开始提取3个字符, bcd
echo ${str5}        # 从倒数第二个位置向左提取字符串, abcde
echo ${str3}      # 从倒数第二个位置向左提取6个字符, cde
  1. 截取子串 练习代码如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
str="abbc,def,ghi,abcjkl"
echo ${str#a*c}     # 输出,def,ghi,abcjkl  一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉)
echo ${str##a*c}    # 输出jkl,             两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉)
echo ${str#"a*c"}   # 输出abbc,def,ghi,abcjkl 因为str中没有"a*c"子串
echo ${str##"a*c"}  # 输出abbc,def,ghi,abcjkl 同理
echo ${str#*a*c*}   # 空
echo ${str##*a*c*}  # 空
echo ${str#d*f)     # 输出abbc,def,ghi,abcjkl,
echo ${str#*d*f}    # 输出,ghi,abcjkl 
echo ${str%a*l}     # abbc,def,ghi  一个百分号(%)表示从右边截取最短的匹配
echo ${str%%b*l}    # a             两个百分号表示(%%)表示从右边截取最长的匹配
echo ${str%a*c}     # abbc,def,ghi,abcjkl
可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)  
  1. 字符串替换 练习代码如下:
1
2
3
4
5
str="apple, tree, apple tree"
echo ${str/apple/APPLE}   # 替换第一次出现的apple
echo ${str//apple/APPLE}  # 替换所有apple
echo ${str/#apple/APPLE}  # 如果字符串str以apple开头,则用APPLE替换它
echo ${str/%apple/APPLE}  # 如果字符串str以apple结尾,则用APPLE替换它

6.定义变量string =“Rolling lessons learned from Hadoop into an open source Hadoop”。

  1. 打印string的长度
1
2
string=”Rolling lessons learned from Hadoop into an open source Hadoop”
expr length $string
  1. 给出Hadoop在string中的索引
1
expr index “$string” Hadoop
  1. 将第一个Hadoop替换为MapReduce
1
echo ${string/Hadoop/MapReduce}
  1. 将所有的Hadoop替换为MapReduce
1
echo ${string//Hadoop/MapReduce}
  1. 删除第一个lessons子串
1
echo ${string#lessons}
  • 2017/05/02 (1) 熟悉各种条件判断的表达式 (2) Test命令和判断的格式 (3) 掌握退出状态
  1. 创建一个文件,并用退出状态显示文件是否被创建成功。

2-4题均要求分别用test和[ ]两种格式完成。 2. 输入变量n1,n2的整数值

(1) 判断n1是否等于n2?并用退出状态显示结果。

(2) 判断n1是否不等于n2?并用退出状态显示结果。

(3) 判断n1是否大于n2?并用退出状态显示结果。

(4) 判断n1是否大于等于n2?并用退出状态显示结果。

(5) 判断n1是否小于n2?并用退出状态显示结果。

(6) 判断n1是否小于等于n2?并用退出状态显示结果。

(7) 判断n1是否大于20并且小于30?并用退出状态显示结果。

(8) 判断n1是否大于n2或小于30?并用退出状态显示结果。

(9) 判断n1是否等于n2或小于30?并用退出状态显示结果。

(10) 判断n1是否大于n2或等于于30?并用退出状态显示结果。

  1. 输入字符串s1,n2

(1) 判断s1是否不为空?并用退出状态显示结果。

(2) 判断s1是否为空?并用退出状态显示结果。

(3) 判断s1是否与s2相同?并用退出状态显示结果。

(4) 判断s1是否与s2不相同?并用退出状态显示结果。

(5) 判断s1是否是“hello”

  1. 创建一个文件test1 (1) 测试文件test1是否存在? 并用退出状态显示结果。

(2) 测试文件test1是否为目录? 并用退出状态显示结果。

(3) 测试文件test1是否为普通文件? 并用退出状态显示结果。

(4) 测试文件test1是否为可读文件? 并用退出状态显示结果。

(5) 测试文件test1是否为可写文件? 并用退出状态显示结果。

(6) 测试文件test1是否为可执行文件? 并用退出状态显示结果。

(7) 测试文件test1是否为链接文件? 并用退出状态显示结果。

(8) 测试文件test1的长度是否不为0? 并用退出状态显示结果。

(9) 使用逻辑非测试一个存在的文件?并用退出状态显示结果。

(10) 测试文件test1是否存在并且可执行?并用退出状态显示结果。

(11) 测试文件test1是否是普通文件或可读?并用退出状态显示结果。

(12) 测试文件test1是否是目录文件并且可写?并用退出状态显示结果。

  1. 首先使用一个正确的shell命令,用变量$?测试其退出状态,然后使用一个错误的shell命令,用变量$?测试其退出状态。、

  2. 初始化两个变量值,然后利用整数比较运算符比较这两个变量的大小,并用echo变量测试其退出状态。

  3. 初始化一个字符串,然后测试文件是否为空,接着再初始化一个字符串,比较这两个字符串是否相等。

  4. 创建一个文件或目录,然后测试其实是文件还是目录,如果创建的是文件,则测试该文件是否可读、可写、可执行,并测试其退出状态。