Shell基础ideago精华版

hello world

#! /bin/bash 声明为bash执行

#!/bin/bash 
# This is a very simple example
echo Hello World

变量

bash的变量无需声明,可以直接使用,切记 等号左右一定不能有空格

引用变量的时候需要在变量名前面加上$符号,否则bash会视为字符串执行

somevar='test'
echo $somevar

字符串

$(($var*3)) $var是字符串,双括号语法支持字符串转数字,然后运算

sips -Z $((${size_array[i]}*2)) $file_2x
sips -Z $((${size_array[i]}*3)) $file_3x

数组

当有变量为如下格式的时候,Bash会自动创建数组

arrary[index]=value
fruits[0]='apple'
fruits[1]='banana'
fruits[2]='orange'
echo ${fruits[1]}

访问数组元素使用花括号,${array[index]}

声明一个数组,并初始化

array=(element1 element2 element3)

输出整个数组

echo ${array[@]}

获取数组长度

${#array[@]}

获取数组第n个元素的长度

${#array[n]}

#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'
echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

添加数组元素

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

"AIX"和"HP-UX"被添加到数组的第7位和第8位

删除数组元素

使用模式(patterns)删除数组元素

按pattern过滤之后存储剩余元素到一个新数组

#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

上面的例子删除数组元素形式如Red*

流程控制

条件选择

-z检测字符串长度为0, -n 检测字符串不为0

如果then和if写在同一行的话,then前面要加;

if [ -z $a ];then 
  echo '$a is empty'
fi

if - then - else - fi 语法

if [ ${size_array[i]} != "1024" ]
then
    file_2x=$out_dir/icon-${size_array[i]}@2x.png
    file_3x=$out_dir/icon-${size_array[i]}@3x.png
    cp $source_file $file_2x
    cp $source_file $file_3x
    sips -Z $((${size_array[i]}*2)) $file_2x
    sips -Z $((${size_array[i]}*3)) $file_3x
else
    file_1024=$out_dir/icon-1024.png
    cp $source_file $file_1024
    sips -Z 1024 $file_1024
fi

for循环

打印目录下所有的文件

#!/bin/bash
for i in $( ls ); do
    echo item: $i
done

打印序列

#!/bin/bash
for n in $(seq 1 10);
do
   echo $n
done

while循环

i=2 
while [[ $i -le 19 ]]; do
    file="demo"$i".js"
    echo $file
    cp demo1.js $file
    let i=i+1
done

until语法

#!/bin/bash
counter=$1
until [ $counter -lt 10 ];
do
   echo the counter:$counter
   let counter=counter-1
done

函数

local声明为局部变量

function hello { 
    local HELLO=World 
    echo  HELLO  
}

比较运算

字符串比较运算符

比较符 说明 举例
-z string 如果长度为零则为真 -z $somevar
-n string 如果长度不为零则为真 -n $somevar
str1 = str2 如果str1与str2相同,则为真 $str1 = $str2
str1 != str2 如果长度为零则为真 $str1 != $str2

算术比较符

比较符 说明 举例
-eq 等于 $1 -eq 10
-ne 不等于 $1 -ne 10
-lt 小于 $1 -lt 10
-gt 大于 $1 -gt 10
-le 小于或等于 $1 -le 10
-ge 大于或等于 $1 -ge 10

continue,break,exit 0

continue,break和主流语言一致

bash好像不支持return ,可以用exit 0 退出脚本

你可能感兴趣的:(Shell基础ideago精华版)