shell基本语法

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;


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

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • Linux Shell 基本语法 一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷...
    M_Baron阅读 2,590评论 0 1
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,739评论 0 10
  • 最近,江歌案火爆整个网络,无论微信还是网站,哪里都可看见江歌、刘鑫、陈世峰这三个名字。想不关注,也是躲不过去了。 ...
    费漠尘阅读 3,304评论 9 10
  • 父母从老家来看我,午后带他们逛小公园,五一时节,天气渐热,远远被音乐声吸引,原来是交谊舞活动角,父母很高兴,于是我...
    向日葵_春藤阅读 302评论 0 0