Shell 编程 基础用法

Shell 编程

更改shell脚本权限

chmod u+x shell.sh

标准头部写法

#! /bin/bash
#! /bin/dash

变量使用

a=10
print $a

读取命令行参数

$#	# 传递给脚本的参数个数
$@	# 传递给脚本所有的参数
$0  # 当前脚本的名字
$1  # 传递给脚本的第一个参数(后面依次类推)

PS: ./test.sh COMP | head 此处读入的外界参数只有COMP,管道后面的并不会被当作参数

if的4种模式

  • 1
    if(($# != 2)) 2>/dev/null	  # 2>/dev/null意为输出错误不再显示到屏幕上,而是到null里
    then				  
    	echo "$#"
    else				  # else后不用加then
    	echo "Hello"
    fi
    
  • 2
    if [ $# -ne 2 ]		          # [ ]功能等同于test,使用-eq这些,而不是==
    then			          # [ ]中每个字符之间都要有空格
    	echo "$#"
    fi
    
  • 3 dash不支持
    if [[ $# < 5 && $# > 2 ]]         # [[ ]]非常强大,可以使用逻辑表达式,也可以使用=~正则表达式
    then                              # dash 不支持
    	echo "$#"
    fi
    
  • 4 判断文件是否存在
    if test -e $file	         # test测试后会返回一个值真或假,可测试数字、字符文件 
    then	
             echo "Exist"            # -e,-r为检测文件是否存在
    fi
    

test详解

=, !=                 # 字符串匹配 (perl里字符串比较使用eq)
-gt,-eq,-ne,-lt       # 数字大小判断(perl 里使用==与!=)
-e,-r		      # 判断文件存在,判断文件存在且可读
-a                    # and  例:if test $a -gt 10 -a -lt 15
-o

3种for循环

  • 1
    for((i=1;i<=10;i++))  # 注意此处是双括号 
    do
    	echo "Hi"
    done
    
  • 2
    for i in $(seq 1 10) 
    do
    	echo $i
    done
    
  • 3 dash写法
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的一个作用是读取文件名(并不打开文件)并通过管道传递

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)		       # 请注意,每个字符之间一定要有空格
原文地址:https://www.cnblogs.com/HsinTsao/p/15408327.html