shell 练习

   



符号
作用
= 赋值符号
“” 弱引用 其内部的变量引用会被替换为变量值
‘’ 强引用 其变量的变量引用会保持原有字符
.
字符匹配,这是作为正则表达式的一部分,用来匹配任何单个字符。

逗号链接一系列的算术操作,虽然里面的内容全部运行,但只有最后一项被返回
\
转义字符,如\X  等价于"X"或'X'
:
空命令,等价于"NOP"(no  op,一个什么也不干的命令).也可以被认为与shell 的内建命令
・・ 命令引用 (true)作用相同.":"命令是一
#!
个  bash 的内建命令,它的返回值为0,就是shell 返回的true.
#
注释,用于帮助信息或者忽略暂时不执行的语句
${}
变量正规表达式,避免变量名提前截断
$num 位置参数 $0,$1,…,${10};(注:如多于两位数需加中括号)
$? 状态判定参数 一般0表示正确(真),其它数字表错误(假)
$!
最后一个命令执行的后台命令的ID
$$
运行脚本进程的ID
$#
传递给脚本或函数的参数的个数
$*和$@
引用传递给脚本或函数的参数列表
()
指令群组,将一串指令括起来,执行时shell会产生subshell来执行它们
(())
bash的内建功能,用于算数运算
[] 中括号 1  在流程控制中表示判断式;  2  在正则表达式中表示"范围"或"集合"
[[]]
中括号的加强版,当中允许使用||和&&,并且可以使用正则表达式
{} 花括号 指令群组,类似于(),但在当前shell中执行,还可以用于字符串的组合















整数测试
隐含着做数值大小比较,所以不要给变量引用加引用
-gt
是否大于,是则为真 ,否则为假
-ge
是否大于等于
-lt
是否小于
-le
是否小于等于
-eq
是否等于
-ne
是否不等于
字符串测试 ASCII数值越大,字符比较时其值越大,(注:使用时应用[[]])
>
是否大于
<
是否小于
==
是否等于
!= 
是否不等于
-z
是否为空,空则为真,否则为假
-n
是否不空,不空为真,否则为假
文件测试
测试文件的存在性以及属性
-e $FILE
是否存在,存在为,真否则为假
-f $FILE
文件是否存在且为普通文件
-d
存在且为目录
-h
存在且为符号链接文件
-b
存在且为块设备文件
-c
存在且为字符设备文件
-s
存在且为套接字文件
-p
存在且为管道文件
-r
当前用户对文件是否拥有读权限
-w
当前用户对文件是否拥有写权限
-x
当前用户对文件是否拥有执行权限
-u
文件是否拥有suid权限
-g
文件是否拥有sgid权限
-k
文件是否拥有sticky权限
-O
当前用户是否为指定文件的属主
-G
当前用户是否为指定文件的属组




写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型

#!/bin/bash

#

if [ $# -lt 1 ]; then

echo "Plz enter a path:"

exit 1

fi


if [ -e $1 ]; then

file $1

else

mkdir -p $1

fi


~

测试脚本:

[root@www bin]# bash  test20.sh

Plz enter a path:

[root@www bin]# bash -x test20.sh abc

+ '[' 1 -lt 1 ']'

+ '[' -e abc ']'

+ mkdir -p abc

[root@www bin]# bash -x test20.sh abc

+ '[' 1 -lt 1 ']'

+ '[' -e abc ']'

+ file abc

abc: directory


写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;


#!/bin/bash

#

if (($# < 2)); then

echo "Plz enter Two integer Numbers!"

exit 1

fi


if (($1 > $2)); then

echo "$1 > $2"

elif

(($1 < $2)); then

echo "$1 < $2"

elif

(($1 == $2)); then

echo "$1 = $2"

else

echo "disparate"

fi

~


测试脚本

[root@www bin]# bash test21.sh

Plz enter Two integer Numbers!

[root@www bin]# bash test21.sh 4

Plz enter Two integer Numbers!

[root@www bin]# bash test21.sh 4 5

4 < 5

[root@www bin]# bash test21.sh 5 5

5 = 5

[root@www bin]# bash test21.sh 5 4

5 > 4


求100以内所有奇数之和(至少用3种方法)

  1. 使用for

#!/bin/bash

#

for i in $(seq 100); do

if [ $[$i%2] -ne 0 ]; then

h=$[$h+$i]

fi

done


echo "sum:$h"

测试脚本:

[root@www bin]# bash test22.sh

sum:2500


2.使用while

#!/bin/bash

#

h=1

j=0

while [ $h -le 100 ]; do

if [ $[$h%2] -ne 0 ]; then

j=$[$h+$j]

fi

let h++

done

echo $j


测试脚本:

[root@www bin]# bash test23.sh

2500


3.暂时想不到



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

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

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

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

#!/bin/bash

#


if [ $# -lt 2 ]; then

echo "Plz enter Two path:"

exit 1

fi


if [ ! -f $1 ]; then

echo "$1 not a common file!"

exit 1

fi

if [ ! -f $2 ]; then

echo "$2 not a common file!"

exit 1

fi

j=$(grep -c "^$" $1)

h=$(grep -c "^$" $2)

m=$(cat $1 |wc -l)

n=$(cat $2 |wc -l)

if [ $j -ge $h ]; then

echo "$1 is max ,the spaceline total:$j"

else

echo "$2 is max, the spaceline total:$h"

fi

if [ $m -ge $n ]; then

echo "$1 is max, the lines total:$m"

else

echo "$2 is max,the lines total:$n"

fi


测试脚本:

[root@www bin]# bash -x test24.sh /etc/fstab /etc/yum.conf

+ '[' 2 -lt 2 ']'

+ '[' '!' -f /etc/fstab ']'

+ '[' '!' -f /etc/yum.conf ']'

++ grep -c '^$' /etc/fstab

+ j=1

++ grep -c '^$' /etc/yum.conf

+ h=3

++ wc -l

++ cat /etc/fstab

+ m=10

++ wc -l

++ cat /etc/yum.conf

+ n=26

+ '[' 1 -ge 3 ']'

+ echo '/etc/yum.conf is max, the spaceline total:3'

/etc/yum.conf is max, the spaceline total:3

+ '[' 10 -ge 26 ']'

+ echo '/etc/yum.conf is max,the lines total:26'

/etc/yum.conf is max,the lines total:26

[root@www bin]# bash test24.sh

Plz enter Two path:

[root@www bin]# bash test24.sh abc

Plz enter Two path:

[root@www bin]# bash test24.sh abc cba

abc not a common file!


9、写一个脚本

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

(2) 判断:

如果输入的是quit,则退出脚本;

否则,则显示其输入的字符串内容

#!/bin/bash

#

read -p "Plz input a string:" -t 5 a

if [ -z $a ]; then

echo "Plz enter string!"

exit 1

fi

if [[ $a == "quit" ]]; then

exit 1

else

echo "$a"

fi



你可能感兴趣的:(Linux―shell练习)