您的位置:首页 > 运维架构 > Shell

Linux入门之Shell脚本基础

2018-01-22 21:11 741 查看
Shell基本元素

(1)#! /bin/bash 必须的,指出shell的类型
(2)# 注释
(3)变量
(4)控制
 
 
一个shell脚本
vi  mkdir.sh
 
#!/bin/bash
# this is mkdir
cd /home
mkdir shellTest
echo "shellTest  is created."

1.echo命令用于在屏幕上显示消息

使用方式:echo 要显示的内容

2.#用于在shell脚本中进行注释

Shell的一般结构

shell 类型

函数

主过程

 

一般模板  abc.sh

#! /bin/bash                           shell类型

#a simple shell script example

#a function

sayhello()                函数

{

    echo "Enter Your name:"

    read name          读取来自键盘输入的变量

    echo "Hello $name"

}

echo "programme starts here..."  主过程

sayhello

echo "programme ends."

Shell中的特殊符号

1、注释符# 

    除了#!/bin/bash里的#特殊

2、美元符 $

    变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来

3、单引号

    被引起的字符全部做普通字符,即全部原样

 echo ‘my $SHELL’

4、双引号

    引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。

5、倒引号(数字1键旁边的那个键)

    引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。

    `pwd`             即pwd命令的执行结果

           $LOGNAME        系统变量

区别下面几句:

    echo ‘my home is $HOME’

    echo “my home is $HOME”

    echo  `my home is $HOME`

 

    echo “my home is `pwd`”

    echo ‘my home is `pwd`’

6. 反斜线

     反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。、

    echo  “Filename  is  N0\$\`”

变量

创建变量

1、可以在任何时间通过简单的赋值来创建变量

语法:

  <variable name>=<value>

Shell中的所有变量都被当作字符串

 

2、引用变量

  $符号用于引用一个变量的内容

  variable1=${variable2}

 

3、在执行shell脚本时,shell还允许用户从键盘中输入一个值给变量。可以使用read命令来做。

read fname

 命令替换

 1、在单个命令行中使用多个命令的一个方法是通过命令替换

例:echo "The date is `date`"

 

2、expr命令:用于求值算术表达式。该命令输出被发送到标准输出

例:expr 4+5  将在屏幕上显示9 

 

3、可以在$((...))中包括一个表达式,用下面的命令来计算它的值:

  $((表达式))

 

实验:编写一个简单的四则计算器

 

echo "Please enter the first number."

read totalqueries

echo "Please enter the second number."

read answered

echo "Please enter the operation."

read opt

result=$((totalqueries $opt answered))

echo "the result of $totalqueries $opt $answered=$result"

 条件判断命令

test n1 -参数 n2          (或 –参数 表达式)

[ n1 -参数 n2 ]

    真返回0,假返回1。

 

参数:

    -lt 小于

    -le小于等于

    -gt  大于

    -ge 大于等于

    -eq 等于

    -ne 不等于

 

·test语句的等价形式[ 1 –lt 4 ]

可用中括号代替test,把表达式括起来实现判断

注意表达式与中括号间有空格。

 

test 1 –lt 4  #判断1<4

echo $?        #结果为0

文件测试

-f 存在且是普通文件

-d 存在且是目录

-s 存在且字节数大于0

-r 存在且可读

-w 存在且可写

-x 存在且可执行

如:test -d “mydoc”  [ -d "mydoc" ]

判断mydoc是否是目录

 

 

 

 

 

 

eg:检测从命令行输入的文件是否存在

if [ $# -ne 1 ]

then 

    echo "usage -$0 file-name"

    exit 1

fi

 

if [ -f $s1 ]

字符串测试

test s      字符串s非空

test s1=s2  字符串s1等于s2

test s1!=s2 字符串s1不等于s2 

test  -z  s         字符串长=0,即为空串

test -n s   字符串长>0

 

=: 等于则为真

!=:不相等则为真

-z字符串:字符串长度为零则为真

-n字符串:字符串长度不为零则为真

分支语句

if [ $# -eq 0 ]

then

    echo “输入了0个参数”

elif [ $# -gt 1 ]

then 

    echo “输入了多个参数”

else 

    echo “输入了1个参数”

fi

 

case “$#” in

   0) echo “输入了0个参数” ;;

   1) echo “输入了1个参数” ;;

   *) echo “输入了多个参数”;; 

esac

每个分支条件后必须以两个分号结尾

 

循环语句

只有条件为真时,就执行do和done之前的命令

while <条件>

do 

   <命令(s)>

done

 

while例子——求1到100的和

declare -i i=1

sum=0

while [ $i –le 100 ]

do

    sum=$[$sum+$i]

    i=$[$i+1]

done

echo $sum

for循环取一列值作为输入并对循环中每个值执行循环

for variable_name in <list_of_values>

do

...

done

 

for i in `seq 1  9`

do

    echo `expr $i \* 10` 

done

    或写 echo $(expr $i \* 10)

    乘号前加转义符,与数字间要有空格。

Read变量

read 变量1 [变量2 …]

    可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。

    如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;

    如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。

 

输出a到b序列数各数的10倍数

read a b

for i in `seq $a $b`

do

echo `expr $i \* 10`

done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: