Shell

!/bin/bash

echo "Hello World !"
屏幕快照

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。

1. Shell 变量

1.1 定义变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

  your_name="runoob.com"  //变量名和等号之间不能有空格

命名规范:

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

1.2 使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="zhanglinyu"
echo $your_name //控制台打印出 zhangzhong
echo ${your_name} // 推荐写法
your_name="zhangzhong"
echo ${your_name} //控制台打印出 zhangzhong
//变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:${your_name}Script

1.3 只读变量
使用readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

your_name="zhanglinyu"
readonly myUrl
your_name="zhangzhong"
屏幕快照

**1.4 删除变量 **
使用 unset 命令可以删除变量。语法:

 unset variable_name //注意不能删除只读变量

1.5 变量类型
运行shell时,会同时存在三种变量:
+ 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

+ 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

+ shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

2. Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。 推荐使用双引号

str="Hello, I know your are ${your_name}!"
echo ${str} //双引号里面可以有变量和转义字符,单引号不行。
  • 获取字符串长度 echo ${#str} //输出29
  • 提取子字符串 echo ${str:1:4} 输出ello

3. 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

定义数组语法:
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

array_name=(1 2 3 4)
//或者
array_name[0]=1
array_name[1]=2
array_name[n]=3 //可以不使用连续的下标,而且下标的范围没有限制。

** 读取数组**

echo ${array_name[0]} //
echo ${array_name[@]} //返回数组所有

获取数组的长度

length=${#array_name[@]}
echo ${length} //4

注释
以"#"开头的行就是注释,会被解释器忽略。

4. Shell 传递参数

 bash test.sh test  
  //则第一个参数是test  
  //我们一般发布命令就要传入test prd之类发布到不同的环境 ,就是通过参数来区别的。

echo "Shell 传递参数实例!";  
echo "执行的文件名:$0"; 
echo "第一个参数为:$1";
echo "传入几个参数:$#";
echo "输出所有参数:$*"
echo "脚本运行的当前进程ID号:$$"
echo "脚本运行的最后一个进程ID号:$!"

//控制台输出

Shell 传递参数实例!
执行的文件名:test.sh
第一个参数为:test
屏幕快照

5.Shell 基本运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

屏幕快照

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

val=`expr 2 + 2`
echo "两数之和为 : $val"

注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

关系运算符
a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

//10 -eq 20: a 不等于 b
布尔运算符
逻辑运算符
字符串运算符
文件测试运算符
file="./test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
//文件可读

6.echo输出命令

# 控制台输入 ok  则 name等于ok
read name 
echo "$name It is a test"
echo `date`//获取命令的信息 date是一个执行命令
echo $(date)//获取命令的信息
# -e 开启转义
echo -e "OK! \n $str" 

# 显示结果定向到文件myfile.txt  如果没有这个文件,就会主动创建
echo "It is a test" > myfile.txt

#原样输出字符串,不进行转义或取变量(用单引号)  输出的就是$str\
echo '$str\'   

#显示命令执行的时间
echo `date` 

7.printf输出命令
Shell不止echo一个输出命令,还有printf。printf 命令模仿 C 程序库(library)里的 printf() 程序。标准所定义,因此使用printf的脚本比使用echo移植性好。想要学习的可以自己Google。

8.test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

9.流程控制

9.1 if else

if condition
then
    command1 
    command2
    ...
    commandN 
fi

if [ ! -z str ]; then echo "true"; fi  //如果变量长度不为0输出true   

9.2 case
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

#! /bin/bash
env=$1
case $env in
    test)
        serverPath1=root@127.0.0.3:/usr/
        ;;
    regress)
        zipsTarget1=""
        ;;
     prd)
        serverPath1=root@127.0.0.1:/usr/
        ;;
      *)
        echo "Need to specify env (test | regress | prd)"
        exit -1;
        ;;
esac

bash test.sh test  //则执行第一条,在前端发布代码区分环境时,经常使用。

还有其他的 for循环,while 语句,until 循环,自行google。

10.Shell函数

11. Shell 输入/输出重定向

输入输出指令
//ssh-key配置指令
cat ~/.ssh/id_rsa.pub | ssh  root@127.0.0.1 "cat - >> ~/.ssh/authorized_keys"

#!/bin/bash
echo "这是重定向输出的文字" > myfile.txt  #会覆盖原来文  件里面的内容
echo "以追加的形式添加到文件的末尾" >> myfile.txt #以追加的形式添加到文件的末尾
cat myfile.txt  #读取myfile.txt里面的内容
//myfile.txt内容
//这是重定向输出的文字
以追加的形式添加到文件的末尾

12.rsync命令

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

13.Linux 命令大全

命令参考地址

14.Mac的一些常用命令

Mac常用命令

其它命令

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

推荐阅读更多精彩内容