Shell编程
2020-03-11 18:01:50    23    0    0
yuziyue

 变量

shell 中的变量没有类型,都是字符串类型的。

# 命令也可以存放在变量里面,此时 $ct 就相当于 cat
ct=cat
$ct /etc/passwd

变量替换

x=*
echo $x

上面的例子会列出当前目录的所有文件,执行步骤如下:
1. x=*表示将字符*赋给了变量x
2. Shell扫描命令行,将x替换成*
3.Shell重新扫描命令行,遇到*后,使用当前目录下的所有文件名来替换。
4.Shell执行echo,将文件列表作为参数传入。

整数算术操作

可用的操作符可是不少,其中包括基本的6种:+  -  *  /  %  **,另外还有一些比较复杂的记法:+=  -=  *=  /=,以及自增variable++和自减variable--等,运算符的前后可以有空格。

$((expression)

# 运算的先后顺序可以用括号来控制
echo $((i = (i + 10) * 10))
100

# 另外一种写法
i=$((i = (i + 10) * 10))
echo $i
8

# 2的3次方
echo $((2 ** 3))
8

# 表达式真伪判断:如果表达式为真,就为result赋值1(真);如果表达式为假,则为result赋值0(假)
i=9
result=$(( i >= 0 && i <= 100 ))
echo $result
1

命令替换

方式一:不推荐
echo today is `date`

方式二:推荐
echo today is $(date)

单引号双引号

单引号:被引起的字符全部做普通字符,即全部原样

双引号:引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。尽量将变量放在双引号里面,这样可以避免变量值为空值的情况。


退出状态

要想理解条件测试是如何运作的,重要的是要明白退出状态在UNIX中的作用。只要程序执行完成,就会向Shell返回一个退出状态码。这个状态码是一个数值,指明了程序运行是否成功。按照惯例,为0的退出状态码表示程序运行成功;非0的退出状态码表示程序运行失败,不同的值对应着不同的失败原因。


条件测试

# 示例1
if who | grep "root" >/dev/null
then
    echo "root is logged on"
fi

# 示例2
who | grep "root" >/dev/null
if [ $? == 0 ];then
    echo "root is logged on"
fi

# 示例3
name=yzy
if test "$name" = yzy
then
    echo "you are $name"
fi

字符串和数字条件测试

# 字符串相等、不相等比较使用: = 或者 !=
if [ "3a" = "3a" ]
then
    echo "good"
fi

# 数字比较,因为shell里面所有变量都是字符串,所以写引号和不写没有区别: -eq -ge -gt -le -lt -ne
if [ "4" -eq "4" ]
then
    echo "good"
fi


条件测试取反

# 一元逻辑否定操作符!可以放置在任意的test表达式之前,否定该表达式的求值结果
if [ ! -e "/etc/profileA" ]
then
    echo "good"
fi


条件测试与

# 因为 -a 的优先级低于比较运算符,所以3个表达式同时满足才为真
count=5
if [ "$count" -ge 0  -a "$count" -lt 10 -a "$count" -eq 5 ]
then
    echo "good"
fi

条件测试或

# 因为 -o 的优先级低于比较运算符,所以只要有一个表达式为真即为真
count=20
if [ "$count" -le 0  -o "$count" -le 10 -o "$count" -eq 20 ]
then
    echo "good"
fi


条件测试与和或同时使用

# 与和或同时使用是有时需要更改优先级,此时则使用 \( \) 括起来,注意需要空格。

\( "$a" -eq 0  -o  "$b" -eq 2 \) -a "$c" -eq 10




上一篇: Scala编程第3版第七章(函数)

下一篇: Bash解析命令行参数

23 人读过
文档导航