shell学习

注释

#代表注释

多行注释(EOF可用其他其他替换)

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

变量:

变量名和等号之间不能有空格

定义变量不用带美元符号,使用时要

your_name="douji"
echo $your_name
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,在字符串中输出变量时常用

删除变量
unset variable_name
字符串
单引号,原样输出,变量不生效
双引号,可输出变量,可以有转义字符(常用)
获取字符串长度
${#string}

数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
读取数组值
${数组名[下标]}
读取所有
echo ${array_name[@]}或${array_name[*]}
获取数组元素个数
echo ${#array[@]}

脚本中输出脚本的文件路径、参数个数,参数等
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
$只认一位数,超过一位数的要用{}括起来,eg
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";//$@是将参数分多个字符串输出
算数运算
expr,常用计算工具
  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边

eg:

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

 

关系运算

-eq,equal缩写

-ne, notequal

-gt,greaterthan

-lt,lessthan

-eg,equal or greater than

-el,

 

条件语句

要点:条件是中括号【】

if[条件1];then 行为 elif[条件2];then 行为 else 行为 fi 

eg:

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

 

for循环

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

 

while语句

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

 

case语句

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

 

 let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,除了$123等表示第几个参数

运算符

布尔运算

!:非

-o:or,或

-a :and,且

 

逻辑运算符

&&

||

 

字符串运算符

-z:zero,字符串长度是否为0,是则返回true

-n:number,字符串长度是否不为0,是则返回true

=

!=

输出 

echo,输入字符串使用

echo -e,开启转义,字符串里的转义次相应显示,eg:echo -e "hello\n",hello后换行

 

printf,格式化输出

eg:

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

 

解读:

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

 

# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 如果没有 arguments,那么 %s 用NULL代替(输出为空),%d 用 0 代替
printf "%s and %d \n"

输入 

read xxx,获取键盘输入内容并定义为变量xxx

函数:

函数名(){

执行语句

}

使用时用函数名,参数不需放在括号里,获取函数返回值,用$?,eg:

 重定向

如果不想从键盘获取输入或输入内容到终端显示,想从文件获取内容作为输入或输出到文件

命令后跟符号和文件名

 

command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
posted @ 2021-10-13 16:34  黄豆唧  阅读(35)  评论(0编辑  收藏  举报