Linux基础部分的学习(4)-shell语法学习2-创新互联

文章目录
  • 前言
  • 一、printf命令
  • 二、test命令与判断符号[]
    • 1.逻辑运算符&&和||
    • 2.test命令
    • 3.文件类型判断
    • 4.文件权限判断
    • 5.整数间的比较
    • 6.字符串比较
    • 7.多重条件判定
    • 8.判断符号[]
  • 三、判断语句
    • 单层if
    • 单层if-else
    • 多层if-elif-elif-else
    • case…esac形式
  • 四、循环语句
    • 1.命令格式1:
    • 2.,命令格式2
    • 3.while…do…done循环
    • 4.until…do…done循环
    • 5.break命令
    • 6.continue命令
  • 五、函数
  • 六-exit命令
  • 七--文件重定向
  • 八 --引入外部脚本

公司主营业务:成都网站设计、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出西安免费做网站回馈大家。
前言

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼


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

printf "%10d.\n" 123  # 占10位,右对齐
printf "%-10.2f.\n" 123.123321  # 占10位,保留2位小数,左对齐
printf "My name is %s\n" "yxc"  # 格式化输出字符串
printf "%d * %d = %d\n"  2 3 `expr 2 \* 3` # 表达式的值作为参数

在这里插入图片描述

二、test命令与判断符号[] 1.逻辑运算符&&和||
  • && 表示与,|| 表示或
  • 二者具有短路原则: expr1 && expr2:当expr1为假时,直接忽略expr2 expr1 ||expr2:当expr1为真时,直接忽略expr2
  • 表达式的exit code为0,表示真;为非零,表示假。(与C/C++中的定义相反)
2.test命令
test命令用于判断文件类型,以及对变量做比较。

test命令用exit code返回结果,而不是使用stdout。0表示真,非0表示假。


acs@9e0ebfcd82d7:~$ ls  # 列出当前目录下的所有文件
homework  output.txt  test.sh  tmp
acs@9e0ebfcd82d7:~$ test -e test.sh && echo "exist" || echo "Not exist"
exist  # test.sh 文件存在
acs@9e0ebfcd82d7:~$ test -e test2.sh && echo "exist" || echo "Not exist"
Not exist  # testh2.sh 文件不存在

代码如下(示例):

test 2 -lt 3  # 为真,返回值为0
echo $?  # 输出上个命令的返回值,输出0

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.文件类型判断
命令格式:
test -e filename  # 判断文件是否存在

在这里插入图片描述

4.文件权限判断
test -r filename  # 判断文件是否可读

在这里插入图片描述

5.整数间的比较
test $a -eq $b  # a是否等于b

在这里插入图片描述

6.字符串比较

在这里插入图片描述

7.多重条件判定
test -r filename -a -x filename

在这里插入图片描述

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

[ 2 -lt 3 ]  # 为真,返回值为0
echo $?  # 输出上个命令的返回值,输出0

注意
	[]内的每一项都要用空格隔开
	中括号内的变量,最好用双引号括起来
	中括号内的常数,最好用单或双引号括起来
三、判断语句
if…then形式
类似于C/C++中的if-else语句。
单层if
if condition
then
   语句1
   语句2
  ...
fi

示例:
在这里插入图片描述
在这里插入图片描述

单层if-else
if condition
then
   语句1
    语句2
   ...
else
    语句1
    语句2
   ...
fi

示例:
在这里插入图片描述
在这里插入图片描述

多层if-elif-elif-else
if condition
then
    语句1
    语句2
    ...
elif condition
then
    语句1
    语句2
    ...
elif condition
then
    语句1
    语句2
else
    语句1
    语句2
    ...
fi

示例
在这里插入图片描述
在这里插入图片描述

case…esac形式
case $变量名称 in
值1)
    语句1
    语句2
    ...
    ;;  # 类似于C/C++中的break
值2)
    语句1
    语句2
    ...
    ;;
*)  # 类似于C/C++中的default
    语句1
    语句2
    ...
    ;;
esac

示例
在这里插入图片描述
在这里插入图片描述

四、循环语句 1.命令格式1:
for var in val1 val2 val3
do
    语句1
    语句2
    ...
done

示例
在这里插入图片描述

在这里插入图片描述

示例二
输出当前路径下的所有文件名,每个文件名一行:

for file in `ls`
do
    echo $file
done

在这里插入图片描述

示例三(输出1-10,10个数)

for i in $(seq 1 10)
do
    echo $i
done

在这里插入图片描述

示例四(使用{1…10} 或者 {a…z})

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

在这里插入图片描述

2.,命令格式2
for ((expressi**加粗样式**on; condition; expression))
do
    语句1
    语句2
done

示例
在这里插入图片描述
在这里插入图片描述

3.while…do…done循环
while condition
do
    语句1
    语句2
    ...
done

示例

4.until…do…done循环
当条件为真时结束。
until condition
do
    语句1
    语句2
    ...
done

在这里插入图片描述
在这里插入图片描述

5.break命令
跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句。
while read name
do
    for ((i=1;i<=10;i++))
    do
        case $i in
            8)
                break
                ;;
            *)
                echo $i
                ;;
        esac
    done
done

在这里插入图片描述

6.continue命令
for ((i=1;i<=10;i++))
do
    if [ `expr $i % 2` -eq 0 ]
    then
        continue
    fi
    echo $i
done

在这里插入图片描述

五、函数
bash中的函数类似于C/C++中的函数,但return的返回值与C/C++不同,返回的是exit code,取值为0-255,0表示正常结束。

如果想获取函数的输出结果,可以通过echo输出到stdout中,然后通过$(function_name)来获取stdout中的结果。

函数的return值可以通过$?来获取。
[function] func_name() {# function关键字可以省略
    语句1
    语句2
    ...
}
func() {name=yxc
    echo "Hello $name"
}

func
func() {name=yxc
    echo "Hello $name"

    return 123
}

output=$(func)
ret=$?

echo "output = $output"
echo "return = $ret"
六-exit命令
exit命令用来退出当前shell进程,并返回一个退出状态;使用$?可以接收这个退出状态。

exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。

exit退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
#! /bin/bash

if [ $# -ne 1 ]  # 如果传入参数个数等于1,则正常退出;否则非正常退出。
then
    echo "arguments not valid"
    exit 1
else
    echo "arguments valid"
    exit 0
fi
七–文件重定向

每个进程默认打开3个文件描述符:

  • stdin标准输入,从命令行读取数据,文件描述符为0
  • stdout标准输出,向命令行输出数据,文件描述符为1
  • stderr标准错误输出,向命令行输出数据,文件描述符为2

可以用文件重定向将这三个文件重定向到其他文件中

命令	说明
command >file	将stdout重定向到file中
command< file	将stdin重定向到file中
command >>file	将stdout以追加方式重定向到file中
command n>file	将文件描述符n重定向到file中
command n>>file	将文件描述符n以追加方式重定向到file中

示例

echo -e "Hello \c">output.txt  # 将stdout重定向到output.txt中
echo "World">>output.txt  # 将字符串追加到output.txt中
read str< output.txt  # 从output.txt中读取字符串
echo $str  # 输出结果:Hello World``
八 --引入外部脚本

语法格式

. filename  # 注意点和文件名之间有一个空格

或

source filename
示例
创建test1.sh,内容为:

#! /bin/bash

name=yxc  # 定义变量name
然后创建test2.sh,内容为:

#! /bin/bash

source test1.sh # 或 . test1.sh

echo My name is: $name  # 可以使用test1.sh中的变量
执行命令:

acs@9e0ebfcd82d7:~$ chmod +x test2.sh 
acs@9e0ebfcd82d7:~$ ./test2.sh 
My name is: yxc

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:Linux基础部分的学习(4)-shell语法学习2-创新互联
网页地址:http://myzitong.com/article/digidi.html