Linux shell

作者: ElephantKing | 来源:发表于2019-12-17 20:15 被阅读0次

变量、变量类型

shell的数据类型主要有字符串,整数,数组,至于浮点数很少使用。变量的定义和使用如下:

str="abc def"
ivalue=123
arr=(1 2 3 4)
echo ${str}
echo ${ivalue}
echo ${arr[@]}

并且整数和字符串是随语境自动转化的,请看下面的栗子:

a="10"
b=20
c=`expr ${a} + ${b}`
echo ${c}

变量a是字符串,变量b是整数,但是expr是求表达式结果的命令,期待所有的参数是整数,所以执行的时候会先尝试都转到整数,如果转化成功则执行,否则报错。数字转字符串同理。

a=10
echo "${a}abc"

shell中的数组则是可变,数组的访问和属性如下:

arr=(1 2 3)
# 数组长度
echo ${#arr[@]}
echo ${#arr[*]}
# 访问数组的元素
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
# 数组变为一个字符串,用空格分开
echo ${arr[*]}
# 数组本身
echo ${arr[@]}
# 数组的遍历,这里有一个小细节要注意
# 遍历${arr[*]},并且不用引号包括
for i in ${arr[*]}
do
echo $i "abc"
done
# 结果如下:
# 1 abc
# 2 abc
# 3 abc
# 遍历${arr[*]},并且用引号包括
for i in "${arr[*]}"
do
echo $i "abc"
done
# 结果如下:
# 1 2 3 abc
# 遍历${arr[@]},并且不用引号包括
for i in ${arr[@]}
do
echo $i "abc"
done
# 结果如下:
# 1 abc
# 2 abc
# 3 abc
# 遍历${arr[@]},并且用引号包括
for i in "${arr[@]}"
do
echo $i "abc"
done
# 结果如下:
# 1 abc
# 2 abc
# 3 abc

数组的插入可以直接用[]。如下:

arr=()
for i in `seq 0 5`
do
arr[$i]=$i
done
echo ${arr[@]}
# 0 1 2 3 4 5

运算

  • 算术运算
a=10
b=20
# 加号左右有空格,结果为30
echo `expr ${a} + ${b}`
# 如果没有空格当做字符串处理,结果为"10+20"
echo `expr ${a}+${b}`
# +号可以换成 - \*  / % == !=
  • 逻辑运算
    &&||用法和其他语言的一致。
a=10
if [ ${a} -gt 5 ] && [ ${a} -lt 20 ]; then
echo "5 < a={$a} < 20"
fi
  • 关系运算
    关系运算只支持整数,不支持字符串,除非这个字符串可以成功转化为整数。
a=10
b="20"  # 可以转化为整数的字符串
if [ ${a} -gt ${b} ];then
echo "a=${a} is big than b=${b}"
fi
# -gt可以换成-lt -eq -ne -ge -le
  • 布尔运算
    ! -o -a表示非、或、与
a=10
if [ ! ${a} -gt 5 -a ${a} -lt 100 ]; then
echo "balabala"
fi

字符串运算

$ -z -n == !=

# $判断字符串是否包含非空白字符
# -z判断字符串是否仅由空白字符组成
# -n判断字符串是否包含字符,测试字符必须需要用""包括,否则永为真
if [ - n "${a}" ];then
echo "balabal"
fi

test命令

-r -w -x -f -d -s -e

file_name="./a.sh"
if test -r ${file_name};then
echo "readable"
fi
if [ -r ${file_name} ];then
echo "readable"
fi

执行命令

执行的命令需要被反引号包括(ESC下面那个键)

echo `pwd`
echo `expr 2 + 2`

流程控制

  • if
a="./test.sh"
if [ -x ${a} ]; then
echo "excuable"
elif [ -w ${a} ]
then
echo "writeable"
else
echo "other"
fi
  • for
st="ab cd ef"
for i in ${st}
do
echo $i
done

arr=(1 1 2 3 4)
for i in ${arr[@]}
do
echo $i
done

for ((i=0;i<10;i++))
do
echo $i
done
  • while
while true
do
if [ ${a} > 10 ];then
break
fi
echo ${a}
a=`expr ${a} + 1`
done

while (( ${a}<10 ))
do
echo "small"
a=`expr ${a} + 1`
done
  • case
a=0
case ${a} in
1)
echo "1"
;;
2)
echo "2"
;;
3)
echo "3"
;;
*)
echo ${a}
;;
esac

函数

function say_hello()
{
echo "hello "$1
}
say_hello "abc"
function add()
{
return `expr $1 + $2`
}
add 1 2
a=$?
echo ${a}

相关文章

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

  • shell基础

    Linux学习 一、shell介绍 Linux shell基础 什么是shell shell是一个命令解释器,提供...

  • Linux下的shell

    Shell 和 Linux shell程序是包含若干行shell或linux命令的文件。linux命令语句只能一行...

  • linux shell脚本攻略笔记

    LINUX SHELL脚本攻略笔记[速查] linux shell脚本攻略笔记

  • Shell学习

    Linux Shell基础教程 (一) (二) Linux Shell简明教程(推荐) (一) (二) Linux...

  • Shell 脚本编程简介

    Shell菜鸟教程[https://www.runoob.com/linux/linux-shell.html] ...

  • shell 教程学习推荐地址

    [shell 教程学习推荐地址:] http://www.runoob.com/linux/linux-shell...

  • bash shell学习

    Shell 传递参数 参考链接:https://www.runoob.com/linux/linux-shell-...

  • shell脚本基础应用

    Shell 教程[https://www.runoob.com/linux/linux-shell.html]li...

  • Shell-基础教程-变量

    参考教程链接 http://www.runoob.com/linux/linux-shell.html Shell...

网友评论

    本文标题:Linux shell

    本文链接:https://www.haomeiwen.com/subject/oqgsnctx.html