十九、Shell编程

                                  Shell编程


      Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

      Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell是解释执行的脚本语言,在Shell中可以调用Linux系统命令。

1、Shell脚本的执行方式

echo “hello world”                                                输出内容到控制台

echo -e “hello world \n hello java”                               输出内容到控制台,支持\反斜杠转义字符

./helloworld.sh                                                   ./的方式执行脚本

sh helloworld.sh                                                   sh方式执行脚本

第一个shell脚本:

#!/bin/bash
echo -e "hello world\nhello java"

#!/bin/bash是指此脚本使用/bin/bash来解释执行。
其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。
bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,…


常用转义字符:

控制字符作用
centered 文本居中right-aligned 文本居右
\\输出\本身
\a输出警告音
\b退格键,也就是向左删除键
\c取消输出行末的换行符。和“-n”选项一致
\eESCAPE键
\f换页符
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

2、Shell中的变量

2.1、变量定义

Linux Shell中的变量分为,系统变量和用户自定义变量:

系统变量:$HOME、$PWD、$SHELL、$USER等等
自定义变量: 
            使用A=8设置一个变量A,并初始化
            使用unset撤销变量
            使用readonly设置静态变量
            使用export设置为全局变量
            $符表示取出变量的值

变量命名规则:

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
  • 等号两侧不能有空格
  • 变量名称一般习惯为大写

测试脚本:

#!/bin/bash
echo -e "hello world\nhello java"

A=8
echo "set A": $A

unset A
echo "unset A": $A

readonly B=2  
echo "readonly B":$B

export B
echo $B

2.2、将linux命令的返回值赋予变量
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号

测试脚本:

#!/bin/bash

A=$(ls -al)
echo $A

B=`ls -al`
echo $B

2.3、设置环境变量
环境变量在/etc/profile文件中定义:
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

查看环境变量:
echo $JAVA_HOME

让修改后的配置信息立即生效:
source /etc/profile
2.4、位置参数变量
$n	 n为数字,$0代表脚本名,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})

$*	 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@	 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

$#	 这个变量代表命令行中所有参数的个数

测试脚本:

#!/bin/bash

echo "$0  $1  $2"

echo "$*"

echo "$@"

echo "$#"

测试$* $@的区别脚本:

#!/bin/bash 
for i in "$*" 
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 
        do 
                echo "The parameters is: $i" 
        done 


x=1 
for y in "$@" 
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
        do 
                echo "The parameter$x is: $y" 
                x=$(( $x +1 )) 
        done
2.5、预定义变量
$$		当前进程的进程号(PID)
$!		后台运行的最后一个进程的进程号(PID)
$?		最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;
                如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

测试脚本:

#!/bin/bash

echo "$$"

./helloworld.sh &      #&号表示后台进程执行这个脚本

echo "$!"

echo "$?"

3、运算符

$((运算式))
$[运算式]
expr m + n               注意expr运算符间要有空格
expr m - n               注意expr运算符间要有空格
expr  *, /, %            乘,除,取余

测试脚本:

#!/bin/bash

echo $((3*4+2))

echo $[3*4+2]

S=`expr 2 + 3`
echo $S

4、条件判断

[ condition ](注意condition前后要有空格)

两个整数之间比较:
	= 字符串比较
	-lt 小于
	-le 小于等于
	-eq 等于
	-gt 大于
	-ge 大于等于
	-ne 不等于
	
按照文件权限进行判断:
	-r 有读的权限
	-w 有写的权限
	-x 有执行的权限
	
按照文件类型进行判断:
	-f 文件存在并且是一个常规的文件
	-e 文件存在
	-d 文件存在并是一个目录

测试脚本:

[ 23 -ge 22 ]

[ -w student.txt ]

[ -e /root/install.log ]

5、流程控制

5.1、if逻辑判断一个例子就解释完全:(注意条件判断[]括号两边的空格)
#!/bin/bash

if [ $1 -eq "123" ]
then
        echo "123"
elif [ $1 -eq "456" ]
then
        echo "456"
else
        echo "=============="
fi

5.2、case逻辑判断:
#!/bin/bash

case $1 in
"1")
        echo "1"
;;

"2")
        echo "2"
;;

*)
        echo "other"
;;
esac

5.4、for循环的两种方式:
for 变量 in 值1 值2 值3… 
  do 
    程序 
  done
#!/bin/bash
#打印数字

for i in "$*"
    do
      echo "The num is $i "
    done
//这里的i、j是键,不是值
for j in "$@"
        do
        echo "The num is $j"
        done

for (( 初始值;循环控制条件;变量变化 )) 
  do 
    程序 
  done
#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done
echo "$s"

5.5、while循环
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

6、读取控制台输入

读取控制台输入的值,赋予NAME这个变量:

#!/bin/bash
# -p:指定读取值时的提示符;
# -t:指定读取值时等待的时间(秒)
# NAME:读取值的变量名

read -t 7 -p "please 7 miao input your name " NAME

echo $NAME

7、函数

#!/bin/bash
function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值