shell编程基础2

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 1. shell脚本: 包含一些命令或声明,并符合一定格式的文本文件  格式要求:首行shebang(#!)机制...
    尛尛大尹阅读 1,873评论 0 1
  • Bash内置基本变量 PWD : 显示当前的工作目录 OLDPWD : 显示上一次的工作目录 ~:用户家目录 - ...
    魏镇坪阅读 1,512评论 0 6
  • 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系...
    呼啦啦的爱阅读 223评论 0 1
  • 什么是Shell Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell S...
    花丶小伟阅读 283评论 0 0
  • 程序:什么是程序 程序是指令加数据来组合来完成 真正关心的是对数据的处理,通过指令对数据的操作 程序编程风格 在程...
    数据革命阅读 431评论 0 0