shell 基础

一:变量声明和使用

1: 声明:变量名=变量的值,注意中间没有空格,示例:

#!/bin/bash

# 如果一个变量能够转换为数字类型就可以使用 -eq 关系运算符
num1="123"
num2="0123"

2:使用  $变量名

echo "$num1"

二:命令替换,(()) 和 $()

1:(())用于数学运算和逻辑运算,栗子:

add() {
    local sum=0
    a=${1}
    b=${2}
    # ((a + b))用于运算 $((a + b))用于将运算的结果赋值给c
    c=$((a + b))
    echo $c
    return $c
}

add 2 3
echo "sum is $sum"
echo "d is $?"

 三:符号 > , < , >=,<= ,== , !=  >> , <<

  > < ,>= <= 只能用到(())里面不能使用在[[ ]]里面,如果使用的 > 会造成什么后果呢:比如下面的代码:

a=1
b=10
if [[ $a > $b ]];then
    echo "$a > $b"
fi

我们会发现在我们项目目录里面多出来个文件夹,而文件夹的名字就是10原因就是 > 被当成了输出文件的意思了

echo "" > ./test.txt
echo haha >> ./test.txt
echo a >> ./test.txt
echo b >> ./test.txt
echo b >> ./test.txt
echo d >> ./test.txt
echo e >> ./test.txt
echo $username >> ./test.txt

expr 1 + 1
expr 2 \* 1
expr 1 / 2
expr 1 - 2

echo $((1 + 1))
echo -n "`echo "scale=2;141*100/7966" | bc`"%

# 上一条命令的执行是否成功 0: 成功 非0: 失败
echo $?

echo -e "\n\n\n"

echo -n "date: "; date +%F
echo -n "Login: ";read

 四:控制语句

1:if else

#!/bin/bash
echo "$USER"

test $USER == "hi"
echo $?
test -z ""
echo $?

a=(1 2 3 4)
# 数组的长度
echo "${#a[@]}"
# 取出数组的所有键
echo "${!a[*]}"
echo "${a[0]}"
echo "${a[1]}"
echo "${a[2]}"
echo "${a[3]}"

aLen="${#a[@]}"
echo "$aLen"
test aLen == 4

# if判断中表达式里面不能有空格
if [ aLen==4 ]; then
    echo "aLen is 4"
fi

# == 或者 = 用于字符和整型的相等判断
if [ ${#a[@]} == 4 ]; then
    echo "bcdefghi"
fi

# -eq 只能用于整型的相等判断 不能用在算术表达式中

# 双小括号可以植入数学表达式
if (($1 == $2)); then
    echo "eq loc"
fi

if [ $1 -eq $2 ]; then
    echo "$1 == $2"
elif [ $1 -gt $2 ]; then
    echo "$1 >= $2"
else
    echo "$1 < $2"
fi

2:for,while循环 

#!/bin/bash

# for i in $(seq 1 9); do

#     echo "$i"
# done

for ((i = 0; i < 10; i++)); do
    if [ $i == 5 ]; then
        continue
    fi
    echo "$i"
done

echo $(date +%F)

i=0
max=10
# (()) 里面也可以进行逻辑和数学运算
while (($i <= $max)); do
    ((i++))
    echo "$i"
done
echo "i is $i"

3:case 

#!/bin/bash

a=1
read -p "input a:" a
echo "a is $a"

case $a in
1)
    echo "1"
    ;;
2)
    echo "2"
    ;;
3)
    echo "3"
    ;;
*)
    echo "*"
    ;;
esac

 五:函数

1:无参数的函数的声明和调用

#!/bin/bash

# $#	传递到脚本或函数的参数个数
# $*	以一个单字符串显示所有向脚本传递的参数
# $$	脚本运行的当前进程ID号
# $!	后台运行的最后一个进程的ID号
# $@	与$*相同,但是使用时加引号,并在引号中返回每个参数。
# $-	显示Shell使用的当前选项,与set命令功能相同。
# $?	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

test() {
    echo "test"
}
test

2: 有参数函数的声明和调用,区别于其他语言的声明方式,即使这个函数有参数,也不会再函数声明里面给这个函数添加形参,而是利用${1} ${2}...${n}的方式取得函数的参数,除此之外在函数内部可以定义函数内部的局部变量,关键字是 local

add() {
    local sum=0
    a=${1}
    b=${2}
    c=$((a + b))
    echo $c
    return $c
}

add 2 3
echo "sum is $sum"
echo "d is $?"

另外函数的执行结果不需要任何参数来进行接收,只需要使用$?就能访问到调用该函数的返回值。

你可能感兴趣的:(shell,linux,运维,服务器)