• 将图像像素转换到较低


    想用shell脚本实现对一个文件夹里所有的图片的像素转换

    这里错误的几个地方:

    1.定义变量时,变量名不加美元符号($),如:

      variableName="value"  (字符串的定义)

    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    2.使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:

    1. your_name="mozhiyan"
    2. echo $your_name
    3. echo ${your_name}

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

    1. for skill in Ada Coffe Action Java
    2. do
    3. echo "I am good at ${skill}Script"
    4. done

    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。推荐给所有变量加上花括号,这是个好的编程习惯。

    3.变量运算:

    s=0                                    #定义一个求和变量,初值为0。

    t=`expr$1**$2`                        #用expr改变运算顺序,求x的y次方。

    t=$[t*3]                               #t乘以3。

    s=$[s+t]                               #结果相加。

    t=$[$1**2]                             #求x的平方。

    t=$[t*4]                               #结果乘以4。

    s=$[s+t]                               #结果相加。

    t=`expr$2*5`                          #求5y的值。

    s=$[s+t]                               #结果相加。

    s=$[s+6]                               #结果加上6。

    echo$s                                #输出结果。

    echo$((a%b))                          #取余

    正确代码:

    #!/bin/bash
    
    #mkdir detection-crowdai_new
    
    count=0
    for image in $(ls detection-crowdai)
    do
        count=$[count+1]
        echo "Hello World !"
      echo $image
    #convert -resize 800x500 image image done echo $count

    $(ls detection-crowdai)相当于一个变量了,实现了对文件夹里所有文件的访问。echo $image能显示文件夹下所有的文件名

    detection-crowdai是在~下的,因为这个shell脚本就在~目录下,所以不要加绝对路径:/home/bnrc/detection-crowdai,也不要写成/detection-crowdai,这样都会报错说找不到文件。

    最后正确运行的代码,这个代码还实现了图片名字没改变,只是像素大小变化了存储在另一个文件夹:

    #!/bin/bash
    
    #mkdir detection-crowdai_new
    
    
    for image in $(ls detection-crowdai)
    do
        dir="/home/bnrc/detection-crowdai/"
        path=$dir${image}
        echo $path
        # convert -resize 800x500 $path $abc
        #mat=".jpg"
        #newname=$image$mat
        newname=$image
        convert -resize 800x500 $path $newname
        #mv $newname /home/bnrc/detection-crowdai_new
        target='/home/bnrc/detection-crowdai_new'
        mv $newname $target
    done

    1.生成的图片我想用shell的重定向,但显然这是不可以的。重定向是从终端将终端上显示的东西输入到文件或者其他地方。

       实际上使用mv将每次生成的图片转移到另一个文件夹就可以了。

    2.字符串的连接,我这里使用了将两个字符串变量直接连接path=$dir${image},也可以直接写成path=$dir$image。这个可以很好地用到添加路径上。

    3.convert这个命令:如果图片放到当前目录,直接convert+文件名就好了。如果图片在当前路径的某个文件夹里,你用/detection-crowdai+文件名,他会说找不到图片。你只能使用绝对路径/home/bnrc/detection-crowdai/才行。

    4.mv $newname /home/bnrc/detection-crowdai_new会一直报错,/home/bnrc/detection-crowdai_new不是一个字符串,shell会认为这个一个变量,但这个变量又没有定义,当然会报错。

    shell跟字符串有很多关系,毕竟你在终端输入的命令都是以字符串形式输入的。

  • 相关阅读:
    接口(interface)的使用于注意事项
    构造方法
    MySQL数据库软件
    final与static的作用
    区分like和in
    list,set,map各有什么异同?
    简述 Overload 与 Override
    标识符的基础知识
    类的继承关系
    MySQL常见索引失效
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6974043.html
Copyright © 2020-2023  润新知