Linux下shell常见语法(详细)总结附示例快速掌握
目录
一、简介二 、常见语法2.1 赋值2.2 打印2.3 if语句2.4 while语句2.5 for语句2.6 case语句2.7 运算2.8 注释2.8.1 单行注释2.8.2 多行注释 :< 2.9 shell脚本运行参数2.9 shell脚本函数及调用 三、其他相关链接1、shell基础知识-echo及单引号、反引号和双引号详解2、C语言、Makefile和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是否等于str2str1 != 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换成任意字符串,也可以删掉:不写 :< 这是一个多行注释 这是一个多行注释 这是一个多行注释 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中添加打印调试信息总结