美文网首页
shell编程基础2

shell编程基础2

作者: 图南99 | 来源:发表于2021-10-15 15:37 被阅读0次

    一、shell脚本传参

    4.1.shell文件中输入

    echo $1 $2 $3
    

    su test.sh one two three
    打印出对应输入的$1 $2 $3参数one two three
    也可以使用args数组方式存储参数

    args=("$@")
    echo ${args[0]} ${args[1]} ${args[2]}
    

    还有简洁的方式

    args=("$@")
    #echo ${args[0]} ${args[1]} ${args[2]}
    echo $@
    

    二、if-else语句

    在shell中的if控制语句很像python中的语

    1. if -then
    if condition
    then
        command1
        command2
        ...
        commandN
    fi
    

    2.if--else语句

    if condition
    then
        command1
        command2
        ...
        commandN
    else
        command
    fi
    

    例如:

    echo -e "Enter the name of file: \c"
    read filename
    
    if [ -e $filename ]#检查文件是否存在
    then
      echo "File found"
    else 
      echo "File is not exist or not found"
    fi
    
    echo -e "Enter the name of file: \c"
    read filename
    
    if [ -f $filename ]#检查文件是常规文件
    then
      echo "File found"
    else 
      echo "File is not exist or not found"
    fi
    
    echo -e "Enter the name of file: \c"
    read filename
    
    if [ -d $filename ]#-d表示directory,判断是否是一个目录
    then
      echo "File found"
    else 
      echo "File is not exist or not found"
    fi
    
    

    注意 -e表示是否存在
    -f表示file,判断是否是常规的文件
    -d表示directory,判断是否是一个目录。
    -e表示empty,默认文件是不为空。
    3.if-then-elif-then-else

    if condition1
    then
        command1
    elif condition2
    then
        command2
    else
        commandN
    fi
    

    例如:

    a=10
    b=20
    if [ $a == $b ]
    then
       echo "a == b"
    elif [ $a -gt $b ]
    then
       echo "a > b"
    elif [ $a -lt $b ]
    then
       echo "a < b"
    else
       echo "Ineligible"
    fi
    

    4.利用if在文件尾部写入内容
    首先要判断是不是常规文件,如果是,在判断是否有写的权限,如果有写得权限需要输入,并不输入的内容保持到文件的维度
    上面可以看出这里需要嵌套if,
    文件写入需要用到cat命令 cat > file 就是覆盖 cat >> file就是不覆盖,直接在后面写入新内容

    echo -e "echo -e "Enter the name of file: \c"
    read filename
    
    if [ -f $filename ]#判断文件是否存在
    then
      if [-w $filename ]#判断写权限
       then
        echo "type some test date. press ctrl+d to quit."
        cat >> $filename
      else
        echo "$filename do not have write permissiong"
      fi
    else
      echo "$filename is not exit"
    fi
    

    2.for循环
    循环一般格式为:

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    dovimne
    

    例如:

    for str in This is a string
    do
        echo $str
    done
    

    还有一种
    for (( 表达式1; 表达式2;表达式3))
    do
    command1
    command2
    command3
    done
    例如

    t=0
    for ((i=1; i<=100; i++ ))
    do
      t=$(( t +i ))
    done
    echo $t
    
    

    使用sh filename.tes这里会发现Syntax error: Bad for loop variable
    因为sh 命令执行脚本的时候实际使用的是 dash,而 dash 不支持这种 C 语言格式的 for 循环写法。
    所以,使用 bash 代替 sh 运行脚本 bash filename.tes

    3.while语句
    1.常见的while语句格式

    while condition
    do
        command
    done
    

    例如

    #!/bin/bash
    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    

    无线循环

    while :
    do
        command
    done
    或者
    while true
    do
        command
    done
    或者前面学到的for
    for (( ; ; ))
    

    4.until循环,until 循环执行一系列命令直至条件为真时停止
    格式

    until condition
    do
        command
    done
    

    例如:打印1到9

    n=1
    until [ $n -ge 10 ]
    do
      echo "$n"
      (( n++ ))
    done
    

    5.case
    case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case 语句格式如:

    case 值 in
    模式1)
        command1
        command2
        ...
        commandN
        ;;
    模式2)
        command1
        command2
        ...
        commandN
        ;;
    esac
    注意:取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
    取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
    

    例如:

    echo 'Enter a number between 1 and 4:'
    echo 'The number you entered is:'
    read aNum
    case $aNum in
        1)  echo 'You have chosen 1'
        ;;
        2)  echo 'You have chosen 2'
        ;;
        3)  echo 'You have chosen 3'
        ;;
        4)  echo 'You have chosen 4'
        ;;
        *)  echo 'You did not enter a number between 1 and 4'
        ;;
    esac
    

    6.跳槽循环
    break 和 continue
    break 命令允许跳出所有循环(终止执行后面的所有循环)
    例如

    while :
    do
        echo -n "Enter a number between 1 and 5:"
        read aNum
        case $aNum in
            1|2|3|4|5) echo "The number you entered is $aNum!"
            ;;
            *) echo "The number you entered is not between 1 and 5! game over!"
                break
            ;;
        esac
    done
    

    continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,只跳出当前循环。

    while :
    do
        echo -n "Enter a number between 1 and 5: "
        read aNum
        case $aNum in
            1|2|3|4|5) echo "The number you entered is $aNum!"
            ;;
            *) echo "The number you entered is not between 1 and 5!"
                continue
                echo "game over"
            ;;
        esac
    done
    

    三、数组

    arr=('Alice' 'Jone' 'Jack' 'Lili')
    arr[4]='Alex'#添加元素
    
    echo "${arr[@]}"#遍历数组
    echo "${arr[1]}"#单个制定位置的元素
    echo "${!arr[@]}"#数组的索引查询
    echo "${#arr[@]}"#数组的长度
    unset  arr[1]# 删除数组
    
    

    相关文章

      网友评论

          本文标题:shell编程基础2

          本文链接:https://www.haomeiwen.com/subject/mnpqoltx.html