chmod u+x shell.sh
#! /bin/bash #! /bin/dash
a=10 print $a
$# # 传递给脚本的参数个数 $@ # 传递给脚本所有的参数 $0 # 当前脚本的名字 $1 # 传递给脚本的第一个参数(后面依次类推)
PS: ./test.sh COMP | head
此处读入的外界参数只有COMP,管道后面的并不会被当作参数
if(($# != 2)) 2>/dev/null # 2>/dev/null意为输出错误不再显示到屏幕上,而是到null里 then echo "$#" else # else后不用加then echo "Hello" fi
if [ $# -ne 2 ] # [ ]功能等同于test,使用-eq这些,而不是== then # [ ]中每个字符之间都要有空格 echo "$#" fi
if [[ $# < 5 && $# > 2 ]] # [[ ]]非常强大,可以使用逻辑表达式,也可以使用=~正则表达式 then # dash 不支持 echo "$#" fi
if test -e $file # test测试后会返回一个值真或假,可测试数字、字符文件 then echo "Exist" # -e,-r为检测文件是否存在 fi
=, != # 字符串匹配 (perl里字符串比较使用eq) -gt,-eq,-ne,-lt # 数字大小判断(perl 里使用==与!=) -e,-r # 判断文件存在,判断文件存在且可读 -a # and 例:if test $a -gt 10 -a -lt 15 -o
for((i=1;i<=10;i++)) # 注意此处是双括号 do echo "Hi" done
for i in $(seq 1 10) do echo $i done
while [ $index -gt 0 ] do filename="hello$index.txt" echo "hello $name" > $filename # $i = $(expr $i - 1) index=$((index-1)) # echo +++$index done
for file in *.jpg # 读取当前目录下所有的.jpg文件 do #操作变量的时候要加$,类似Vue的语法 #此处转换.jpg为.png,注意此处的echo,它有打开此文件的作用,若无可能无法将值赋给变量png png=$(echo "$file" | sed 's/jpg/png/g') done for file in * # 读取当前目录所有文件 do print $file done
echo的一个作用是读取文件名(并不打开文件)并通过管道传递
echo -n # 不换行输出 echo "hello world" >> a.txt # 追加至a.txt中 echo "hello world" > a.txt # 写入a.txt中
test=$() test=``
num=$(($1 + 1)) # 使用双括号进行运算赋值,$()这种无法进行计算会报错 num=$(expr $1 + 1) # 请注意,每个字符之间一定要有空格