shell-编程


title: shell 编程
tags: [linux,shell]
categories:

  • linux
  • shell
    date: 2021-05-06 09:44:16

shell 编程

  • 最近在用Linux倒腾一些东西,发现好多东西都可以使用写成一个shell脚本来简化,所以学习一下shell.
示例
#! /bin/bash
echo "hello,world!"
shell 变量
//注意不能加空格
myname="cuiwenyao"
echo ${myname}
hername="qinmengyao"
echo ${myname} "love" ${hername}
//字符串拼接
string="${myname} "love" ${hername}"
echo string
//获取长度
echo ${#myname}
//提取字串
string=${myname:1:2}
echo string
数组
  • bash 只支持一维数组。
  • shell用小括号表示数组,数组元素用空格分开。
myarray=(1 2 3 4)
echo ${myarray[0]}
myarray[0]=10
echo ${myarray[0]}
//获取所有元素
echo ${myarray[@]}
//获取数组长度
echo ${#myarray[@]}
echo ${#myarray[*]}
//获取单个元素的长度
echo ${#myarray[0]}
运算符
运算符说明举例
+加法`expr $a + $b`
-减法`expr $a - $b`
*乘法`expr $a * $b`
/除法`expr $a / $b`
%取余`expr $a % $b`
=赋值`expr $a = $b`
==相等。`expr $a == $b`
!=不相等。`expr $a != $b`
#! /bin/bash
a=10
b=20
r=`expr ${a} + ${b}`
echo ${r}
r=`expr ${a} - ${b}`
echo ${r}
r=`expr ${a} \* ${b}`
echo ${r}
r=`expr ${a} / ${b}`
echo ${r}
r=`expr ${a} % ${b}`
echo ${r}
关系运算符
运算符说明举例
-eq相等[${a} -eq ${b}]
-ne不相等[${a} -ne ${b}]
-gt大于[${a} -gt ${b}]
-lt小于[${a} -lt ${b}]
-ge大于等于[${a} -ge ${b}]
-le小于等于[${a} -le ${b}]
![!false]
-o[${a} -lt 20 -o ${b} -gt 100]
-a[${a} -lt 20 -a ${b} -gt 100]
||[[${a} -lt 20 || ${b} -gt 100]]
&&[[${a} -lt 20 && ${b} -gt 100]]
字符串运算符
运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。
文件测试运算符
运算符说明举例
-b是否是块设备文件[ -b $file ]
-c是否是字符设备文件[ -c $file ]
-d是否是目录[ -d $file ]
-f是否是普通文件(既不是目录,也不是设备文件)[ -f $file ]
-g是否设置了 SGID 位[ -g $file ]
-k是否设置了粘着位[ -k $file ]
-p是否是有名管道[ -p $file ]
-u是否设置了 SUID 位[ -u $file ]
-r文件是否可读[ -r $file ]
-w是否可写[ -w $file ]
-x是否可执行[ -x $file ]
-s是否为空[ -s $file ]
-e检测文件(包括目录)是否存在[ -e $file ]
流程控制
  • shell的流程不可为空。
#! /bin/bash
num1=$[2*4]
num2=$[1+5]
if test $[num1] -eq 8
then
    echo '两个数字相等!'
elif test $[num1] -lt $[num2]
then 
    echo '两个数字不相等!'
else
    echo 'this is else'
fi

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

echo "while 测试 1"
var=5
while (( ${var}<=10 ))
do 
    echo ${var}
    var=`expr ${var} + 1`
done

echo "while 测试 2"
var=5
while test ${var} -ne 10
do 
    echo ${var}
    let "var++"
done

echo "while 测试 3"
echo "按下ctrl+d退出"
echo "输入a,b的值,我会帮你输出和"
while read a b
do 
    if test ${a} -eq 10 
    then 
        echo "退出"
        break
    fi
    echo `expr ${a} + ${b}`
done

echo "until 测试 1"
var=0
until test ${var} -eq 10
do
    echo ${var}
    var=`expr ${var} + 1`
    echo ${var}
    let "var++"
done

echo "case 测试 1"
var=1
case ${var} in
1)
    echo "1"
    ;;
2) 
    echo "2"
    ;;
esac
shell 函数
#!/bin/bash
fun(){
    echo "这个函数会对三个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $((${aNum}+${anotherNum}+${1}))
}
fun 10
echo "三个数字之和为 $? !"
参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
文件包含
. test.sh
source test.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值