shell编程基础2

2021-10-15  本文已影响0人  图南99

一、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]# 删除数组

上一篇下一篇

猜你喜欢

热点阅读