shell基本语法

2019-03-21  本文已影响0人  三水叔叔

shell脚本的执行方式

echo输出内容到控制台
  -e:  支持反斜线控制的字符转换
控制字符        作        用 
\\                      输出\本身
\a                      输出警告音
\b                      退格键,也就是向左删除键
\c                      取消输出行末的换行符。和“-n”选项一致
\e                      ESCAPE键
\f                      换页符
\n                      换行符
\r                      回车键
\t                      制表符,也就是Tab键
\v                      垂直制表符
\0nnn               按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh                按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

[root@hadoop101 sbin]$ echo "helloworld"
helloworld

[root@hadoop101 /]# echo -e "helloworld\n"
helloworld


[root@hadoop101 /]# echo -e \\
\

[root@hadoop101 Packages]# echo -e "hello\tworld"
hello   world

2)脚本格式
脚本以  #!/bin/bash   开头
[atguigu@hadoop101 datas]$ touch helloworld.sh
[atguigu@hadoop101 datas]$ vi helloworld.sh

在helloworld.sh中输入如下内容
#!/bin/bash   
echo "helloworld"
bash或sh+脚本(不用赋予脚本+x权限)
sh /root/helloWorld.sh
sh helloWorld.sh

定义变量

(1)定义变量A
A=8
(2)撤销变量A
unset A
(3)声明静态的变量B=2,不能unset
readonly B=2  
(4)可把变量提升为全局环境变量,可供其他shell程序使用
export 变量名

将命令的返回值赋给变量

(1)A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
(2)A=$(ls -la) 等价于反引号

设置环境变量

(1)在/etc/profile文件中定义JAVA_HOME环境变量
export JAVA_HOME=/opt/module/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin

(2)查看环境变量JAVA_HOME的值
[root@hadoop101 datas]$ echo $JAVA_HOME
/opt/module/jdk1.7.0_79

(3)让修改后的配置信息立即生效
source /etc/profile

位置参数变量

$n  (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$*  (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#  (功能描述:这个变量代表命令行中所有参数的个数)
#!/bin/bash

echo "$0    $1        $2"

echo "$*"

echo "$@"

echo "$#"

预定义变量

$$      (功能描述:当前进程的进程号(PID))
$!      (功能描述:后台运行的最后一个进程的进程号(PID))
$?      (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
#!/bin/bash

echo "$$"
./helloworld.sh &

echo "$!"

echo "$?"

运算符

(1)“$((运算式))”或“$[运算式]”
(2)expr m + n (注意expr运算符间要有空格)
(3)expr m - n 
(4)expr  \*, /, %(乘,除,取余)

案例:计算(2+3)X4的值
(1)采用$[运算式]方式
[root@hadoop101 datas]# S=$[(2+3)*4]
[root@hadoop101 datas]# echo $S
(2)expr分布计算
S=`expr 2 + 3`
expr $S \* 4
(3)expr一步完成计算
expr `expr 2 + 3` \* 4

条件判断

1 判断语句
[ condition ](注意condition前后要有空格)
[ condition ] && echo OK || echo notok          条件满足,执行后面的语句
2 常用判断条件
1)两个整数之间比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2)按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
4)案例
(1)23是否大于等于22
[ 23 -ge 22 ]
(2)student.txt是否具有写权限
[ -w student.txt ]
(3)/root/install.log目录中的文件是否存在
[ -e /root/install.log ]

流程控制

if判断
1)基本语法:
if [ 条件判断式 ];then 
  程序 
fi 

if [ 条件判断式 ] 
  then 
    程序 
fi
判断输入的数是否等于123,是否等于456
#!/bin/bash

if [ $1 -eq "123" ]
then
        echo "123"
elif [ $1 -eq "456" ]
then
        echo "456"
fi
case语句
case $变量名 in 
  "值1") 
    如果变量的值等于值1,则执行程序1 
    ;; 
  "值2") 
    如果变量的值等于值2,则执行程序2 
    ;; 
  …省略其他分支… 
  *) 
    如果变量的值都不是以上的值,则执行此程序 
    ;; 
esac
输入1,输出1;输入2,输出2;输入其他,输出other
!/bin/bash

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

"2")
        echo "2"
;;
*)
        echo "other"
;;
esac


for循环
(1)从1加到100
#!/bin/bash

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

read读取控制台输入
#!/bin/bash

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

echo $NAME

函数

自定义函数
[ function ] funname[()]
{
    Action;
    [return int;]
}
    
funname
(1)计算输入参数的和
#!/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;


上一篇 下一篇

猜你喜欢

热点阅读