shell脚本语法 Linux基础4-Shell语法

09/11 10:25:32 来源网站:辅助卡盟网

7 read命令

read命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code为1,否则为0。

参数说明:

-p:后面可以接提示信息;-t:后面跟秒数,定义输入字符的等待时间,超过等待时间后会自动忽略此命令。

示例:

read name
yrx
echo $name
yrx
read -p "Enter your name:" -t 30 name
Enter your name:yrx
read -p "Enter your name:" -t 5 name

8 echo命令8.1 输出格式

echo用于输出字符串。格式:

echo STRING

原样输出字符串,不进行转义或取变量:

name=yrx
echo '$name\"' # 单引号

显示命令的执行结果:

echo `date` # 左上角的那个点

shell脚本语法_shell 脚本语法 数组_hadoop中 shell脚本语法学习

8.2 显示字符串

普通字符串:

echo "Hello world!"
echo Hello world! # 引号可以省略

转义字符:

echo " \"Hello world! \" "
echo \"Hello world! \"

8.3 显示变量

name=yrx
echo "My name is ${name}"

8.4 显示换行/不换行

显示换行:

echo -e "hi\n" # \n换行
echo "yrx"

输出:

hi
yrx

显示不换行:

echo -e "Hi \c" # \c 不换行
echo yrx

输出:

Hi yrx

8.5 显示结果定向至文件

echo "Hello world" > output.txt # 将内容以覆盖的方式输出到output.txt

9 printf命令

printf命令用于格式化输出,类似于C/C++中的printf函数。

默认不会在字符串末尾添加换行符。

格式:

printf format-string [arguments...]

示例:

printf "d.\n" 123                      #       123.
printf "%-10.2f.\n" 123.45678             #123.46    .
printf "My name is %s\n" "yrx"            #My name is yrx
printf "%d + %d = %d\n" 2 3 `expr 2 \+ 3` #2 + 3 = 5

10 test命令与判断符号[]10.1 逻辑运算符10.2 test命令在命令行中输入man test,可以查看test命令的用法。 test命令用于判断文件类型,以及对变量作比较。 test命令用exit code返回结果shell脚本语法,而不是使用stdout。0表示真,非0表示假。

test 2 -lt 3
echo $?       # 0,$?输出上一条命令的返回值
tets 2 -gt 3  
echo $?       # 1
ls
homework  output.txt  test.sh  tmp
test -e test.sh && echo "exist" || echo "Not exist"
exist  # test.sh 文件存在
test -e test2.sh && echo "exist" || echo "Not exist"
Not exist  # testh2.sh 文件不存在

10.3 文件判断

文件类型判断:

test -e filename # 文件是否存在
test -f filename # 是否为文件
test -d filename # 是否为目录

文件权限判断:

test -r filename # 判断文件是否可读
test -w filename # 可写
test -x filename # 可执行
test -s filename # 是否为空文件

10.4 整数间的比较

test $a -eq $b # 是否相等
-eq   # 等于
-ne   # 不等于
-gt   # 大于
-lt   # 小于
-ge   # 大于等于

shell脚本语法_hadoop中 shell脚本语法学习_shell 脚本语法 数组

10.5 字符串比较

test -z STRING    # 判断STRING是否为空,如果为空,返回true
test -n STRING    # 判断STRING是否非空,如果非空,返回true(-n可以省略)
test str1 == str2 # 判断两字符串是否相等
test str1 != str2 # 判断两字符串是否不相等

10.6 多重条件判定

test -r filename -a -x filename # 两条件是否同时成立
-a
-o # 至少一个成立
!  # 取反

10.7 符号判断[]

[]与test的用法几乎一样,更常用于if语句中。另外 [ [ ] ]是[]的加强版,支持的特性更多。

例如:

[ -2 -lt 3 ]  # 为真,返回0
echo $?       # 0
ls
homework  output.txt  test.sh  tmp
[ -e test.sh ] && echo "exist" || echo "Not exist"
exist  # test.sh 文件存在
[ -e test2.sh ] && echo "exist" || echo "Not exist"
Not exist  # testh2.sh 文件不存在

注意:

例如:

name="dfjb yrx"
[ $name == "dfjb yrx" ]  # 错误,中间有空格
[ "$name" == "dfjb yrx" ]  # 正确

11 判断语句

if...then

11.1 单层if

if condition
then
    语句1
    语句2
    语句2
    ...
fi

示例:

#! /bin/bash
a=3         
if [ $a -gt 2 ]              
then     
    echo `expr ${a} + 2`
fi

11.2 if-else

if condition
then
    语句1
    语句2
    ...
else
    语句1
    语句2
    ...
fi

示例:

#! /bin/bash 
a=3  
if [ $a -gt 3 ] 
then 
    echo `expr ${a} + 2` 
else 
    echo `expr ${a} \* 2 `
    echo hhh
fi 

11.3 多层if-elif-elif-else

if condition

then
    语句1
    语句2
    ...
elif condition
then
    语句1
    语句2
    ...
elif condition
then
    语句1
    语句2
    ...
else
    语句1
    语句2
    ...
fi

示例:

#! /bin/bash
read -p "score 0-100 :" score
if [ $score -gt 90 ]
then
    echo "very good"
elif [ $score -gt 60 ]
then
    echo good
else
    echo bad
fi  

11.4 case-esca形式

类似于C/C++中的switch语句。

命令格式:

case $变量 in
    值1)
        语句1
        语句2
        ...
        ;;     # 相当于break
    值2)
        语句1
        语句2
        ...
        ;;
    *)        # 相当于default
        语句1
        语句2
        ...
        ;;
esac

示例:

#! /bin/bash
read -p "score 1-4 :" score
case $score in
    3)                                                                        
        echo "very good"
        echo "${score}"
        ;;
    2)
        echo "good"
        ;;
    1)
        echo "bad"
        ;;
    *)
        echo "very bad"
        ;;
esac

12 循环语句

13 函数

14 exit命令

15 文件重定向

16 引入外部脚本

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!