Linux下shell常见语法(详细)总结附示例快速掌握

一、简介

本文主要介绍shell中常用的一些语法,同时附示例方便读者快速掌握。

二 、常见语法

2.1 赋值

直接赋值

a='test' # 单引号定义字符串
b="test" # 双引号定义字符串
c=test   # 也可以不加引号,同样表示字符串
d=123  #直接赋值数值

通过 $ 或者 ${} 使用,${}中的括号指定了变量的范围

name=teststr
echo $name
echo ${name}
echo ${name}big   # 输出teststrbig

2.2 打印

# 直接使用echo
echo $(KBUILD_CFLAGS)
echo "this is test---------------\r\n"
# 打印内容显示红色
echo -e "\033[1;31m  this is test--------------- \033[0m"

# -e 开启转义 \c 不换行
echo -e "Hi \c" 
echo "body"
# 输出 Hi body

2.3 if语句

if语句一般是结合下面比较或者判断的条件,然后执行相应的命令
语法格式:

if ... then ... elif ... then... else ...

示例1:

if [ -z "$1"];then
	if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ];then
		echo "嵌套if语句"
	fi
fi

示例2:

if ! [ "$a" -lt "$b" ]
then
    echo ${a} <= ${b}
else
    echo ${a} < ${b}
fi

文件类型判断

参数意义
-e测试是否存在
-f测试是否为文件
-d测试是否为目录

整数比较

参数意义
-eq等于
-ne不等于
-gt大于
-lt小于
-ge大于等于
-le小于等于

字符串比较

参数意义
-z STRING判断STRING是否为空,如果为空,则返回true
-n STRING判断STRING是否非空,如果非空,则返回true(-n可以省略)
str1 == str2判断str1是否等于str2
str1 != str2判断str1是否不等于str2

多重判定条件

参数意义
-a两条件是否同时成立
-o两条件是否至少一个成立
!取反。如 test ! -x file,当file不可执行时,返回true

2.4 while语句

while condition
do
	语句1
	语句2
	...
done

示例:

while true
do
	echo "this is test"
done

2.5 for语句

语法1:

for var in val1 val2 val3
do
	语句1
	语句2
	...
done

语法2:

for ((expression; condition; expression))
do
	语句1
	语句2
done

示例1:

for file in `ls`
do
    echo $file
done

示例2:

for i in {a..z}
do
    echo $i
done

示例3:

for ((i=1; i<=100; i++))
do
	echo "this is test :$i"
done

2.6 case语句

case $n in
"值1")
    程序
;;
"值2")
    程序
;;
*)
    程序
;;
esac  
case那行要以in结尾,;;代表一个条件的结束,*代表默认default  

示例:

a=2
case $a in
    1)
        echo ${a} = 1
        ;;  
    2)
        echo ${a} = 2
        ;;  
    3)                                                
        echo ${a} = 3
        ;;  
    *)
        echo ${a} = 其他
        ;;  
esac

2.7 运算

expr支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。

+ -
加减运算。两端参数会转换为整数,如果转换失败则报错。

* / %
乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。

() 可以改变优先级,但需要用反斜杠转义
a=3
b=4

echo `expr $a + $b`  # 输出7
echo `expr $a - $b`  # 输出-1
echo `expr $a \* $b`  # 输出12,*需要转义
echo `expr $a / $b`  # 输出0,整除
echo `expr $a % $b` # 输出3
echo `expr \( $a + 1 \) \* \( $b + 1 \)`  # 输出20,值为(a + 1) * (b + 1)

其他加法方式:

count=$((count + 1))
let "count = 5 + 3"

2.8 注释

2.8.1 单行注释

在行首加上#符号

# 这是一个单行注释
echo "hello world!"
2.8.2 多行注释 :<<EOF EOF

以:<<EOF为一行的开头,以EOF为一行的结尾,中间为注释内容

:<<EOF
这是一个多行注释
这是一个多行注释
这是一个多行注释
EOF

可以把EOF换成任意字符串,也可以删掉:不写

:<<ccc
这是一个多行注释
这是一个多行注释
这是一个多行注释
ccc
echo "hello world!"

<<!
这是一个多行注释
这是一个多行注释
这是一个多行注释
!

2.9 shell脚本运行参数

在执行shell脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推。特殊的,$0是文件名(包含路径)

创建文件test.sh:

#! /bash/bin

echo "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4

使用以下命令

chmod +x test.sh
./test.sh 1 2 3 4

输出结果

文件名:./test.sh
第一个参数:1
第二个参数:2
第三个参数:3
第四个参数:4

其他相关变量

参数说明
$#代表文件传入的参数个数,如上例中值为4
$*由所有参数构成的用空格隔开的字符串,如上例中值为"$1 $2 $3 $4"
$@每个参数分别用双引号括起来的字符串,如上例中值为"$1" “$2” “$3” “$4”
$$脚本当前运行的进程ID
$?上一条命令的退出状态(注意不是stdout,而是exit code)。0表示正常退出,其他值表示错误
$(command)返回command这条命令的stdout(可嵌套)
command 返回command这条命令的stdout(不可嵌套)

2.9 shell脚本函数及调用

基本语法:

function_name() {
    # 函数体
    # 你希望执行的命令
}
示例一:
定义一个函数,打印 hello world
hello_world() {
    echo "Hello, World!"
}
//调用
hello_world

//输出
[root@localhost /]# Hello, World!
示例二:
# 定义函数,使用 echo 返回计算结果
sum() {
    echo $(($1 + $2))
}

# 调用函数并获取结果
result=$(sum 5 10)
echo "The sum is $result"

[root@localhost /]# The sum is 15

三、其他相关链接

1、shell基础知识-echo及单引号、反引号和双引号详解

2、C语言、Makefile和shell中添加打印调试信息总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值