Shell表达式

条件表达式

文件表达式

# 文件表达式
if [ -e file ] 为文件,则为真 
if [ -d … ] 为目录,则为真 
if [ -f file ] 是否为常规文件,则为真
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
if [ -L filename ] 如果 filename为符号链接,则为真
if [ -h filename ] 如果文件是软链接,则为真
if [ filename1 -nt filename2 ] 如果 filename1比 filename2新,则为真。
if [ filename1 -ot filename2 ] 如果 filename1比 filename2旧,则为真。

eg:
if test -d /data   //判断目录是否存在

整数变量表达式

# 整数变量表达式
if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<

字符串变量表达式

# 字符串变量表达式
If [ $a = $b ] 如果string1等于string2


# 字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空则是真
if [ $sting ] 如果string 非空,返回0 (和-n类似)

# 前面是否包含后面
if [[ "${apps[@]}" =~ "$i" ]];then


# 判断是否为数字
## 方法1

a=1234;

echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo string a is numbers

# 第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真。

# sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要的内容:即后面的表达式所匹配的行,

# 这是通过表达式中加入“p”命令来实现的。

# /^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行

数组

我们也可以使用下标来定义数组:
array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

使用@ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${my_array[*]}"

echo "数组的元素为: ${my_array[@]}"

循环

while循环

while无限循环
# 第一种
while (1)
do 
  command
done

# 第二种
while true
do 
  command
done

# 第三种
while  :
do
  command
done

for循环

for i in {1..5}
do
  echo $i
done


for ((i=1;i<5;i++))
do
  echo $i
done

for i in `seq 5`
do
  echo $i
done