shell编程

1.source命令

source 配置文件    # 立即是配置文件生效
. 配置文件         # ./ 是当前文件夹  .后加空格效果等于source

2.配置文件

/etc/profile       #对每个用户起作用
/etc/profile.d/*.sh
/etc/bashrc
~/bash_profile    #每个用户的配置文件
~/.bashrc     
~/.bash_logout    #退出执行

PS1变量
umash
PATH
umask

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/20369CE2-564A-4E06-A944-684EC910E649.png)

3.登录提示信息(issue只对本机,如果issue.net远程登录)

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/C9BED461-9647-4109-9A04-0EAACC857562.png)

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/7E325742-2430-4127-96A3-0C6B6A035821.png)

4.退出欢迎

/etc/motd   #远程和本地都可以

5.echo命令

 mac@MacBook-Air  ~/Desktop  echo -e "\e[1;31m 我喜欢你兰老师,我要追你 \e[0m"
 我喜欢你兰老师,我要追你
 \n #换行
 \t #table
30m 31m 32m 33m 34m 35m 36m 37m
黑色 红色 绿色 黄色 蓝色 洋红 青色 白色

一、Bash的基础功能

  • 历史别名和快捷键

    alias mvn="/Users/liuxin/Desktop/apache-maven-3.2.1/bin"
    
  • 输出重定向

    • 键盘输出 /dev/stdin 0
    • 显示输出 /dev/stdout 1
    • 错误输出 /dev/stderr 2
    • 覆盖重定向 >
    • 追加重定向 >>
    • 输出报错信息 2>
    • 命令 >~/text 2>&1 如果命令正确就写到text中,错误就输出到2里然后在输出到1里面
    • 命令&>~/text 等同于上一个,简单写法
    • 命令>文件1 2>文件2 把正确的放文件1,错误的放到文件2
  • 多命令顺序执行

    • ; 多个命令顺序执行 【缺点就是错误了,后面也执行】
    • && 连接服 【如果错就不执行】
    • 命令1&&命令2 【命令1对就执行命令2,不对就不执行2了】
    • 命令1||命令2 【 命令1错误了,就执行命令2,对了就不执行命令2
    • ls && echo yes || echo no 【 如果正确就yes如果错了就no
  • 输入重定向(crtl+d查看)

    • -c 统计字节数
    • -w 统计单词数
    • -i 统计行数
    • wc < access.log 或者wc access.log 统计文件
    • Wc << ddy 当输入的内容中遇到ddy就结束,开始统计
  • Shell统配符号

    • ? 匹配一个任意字符
    • * 匹配0个或多个
    • [] 匹配中括号中任意一个
    • [-] 匹配中括号中范围 [a-z]任何一个 一个
    • [^] 不匹配中括号中范围 [^a-z]
  • 管道福

    • 命令1 | 命令2 【命令1的内容,作为命令2的条件】
    • ls -i /etc | more 【分屏幕查看】
  • 黑洞

    • ls &>/dev/null 所有信息,都扔了不看

二、Bash变量

  • export 变量名=变量值

  • Bash 进入子shell 然后export y=123 然后set就能看到y的变量

    mac@MacBook-Air  ~/Desktop  bash
    bash-3.2$ export y=123
    bash-3.2$ set
    
  • Locale 查看语系 等同于 echo $LANG

    mac@MacBook-Air  ~/Desktop  echo $LANG
    zh_CN.UTF-8
    
  • 位置参数变量

    $n n为数字,$0代表命令本身,$1-$9 代表第一到第九个参数,十以上参数,需要大括号${10}
    $* 这个变量代表命令行中所有的参数,$* 把所有参数看成一个整体
    $@ 这个把命令行中参数区别对待,可以遍历
    $# 这个变量代表命令行中所有参数的个数
    $? 返回零代表执行成功,反之失败
    $$ 当前进程号
    $! 后台运行进程号

    #!bin/shell
    num1=$1
    num2=$2
    sum=$(($num1+$num2))  # 双括号,如果是单括号,是输出字符串,双括号是计算
    echo $sum
    
    #!bin/shell
    #在当前目录下创建num1目录,然后进入num1目录创建num2目录
    num1=$1
    num2=$2
    cd ./
    mkdir $1
    cd ./$1
    mkdir $2
    

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/6021D4E2-A302-455B-9162-B78530DCA613.png)

#!bin/bash

for i in "$@"
    do
        echo "$i"
    done
  • Read 键盘接受变量
参数 解释
-p 提示信息
-t 秒数
-n 字符限制
-s 隐藏输入
#!/bin/bash
read -p "please input your name:" name
echo "你好,$name 先生"
#!/bin/bash
#时间限制30秒
read -p "please input your name in 30s:" -t 30 name
echo "你好,$name 先生"
#!/bin/bash
#隐藏输入
read -p "please input your password:" -s password
echo "你好,$name 先生"
#!/bin/bash
#只允许接受一个字符,如果不是一个就终止运行
read -p "please input [y|n] end:" -n 1 pw
echo "退出成功"

四、bash运算符

  • declare 声明变量类型

    declare [+/-] [选项] 变量名
    > - :给变量设定类型属性
    > + :取消变量的类型属性
    > -a:将变量声明为数组型
    > -i:将变量声明为整数类型(integer)
    > -x:将变量声明为环境变量
    > -r:将变量声明为只读变量
    > -p:显示指定变量的被声明的类型
    
    movie[0]=1
    movie[1]=2
    declare -a movie[2]=3
    echo ${movie}
    echo ${movie[2]}
    echo ${movie[*]}
    
  • 字符串截取命令

    • cut 字段提取
      • -f 列号:提取第几列
      • -d 分隔符: 按照指定分隔符分割 默认是table
    mac@MacBook-Air  ~/Desktop/ssh  cat student
    UID   NAME
    1 liuxin
    2 ayu
    3 haoliang
    4 sunxiao
    # 提取包含i的行数,但是不包含sun
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun
    1 liuxin
    3 haoliang
    # 截取第二列 默认是table分隔符
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun | cut -f 2
    liuxin
    haoliang
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun | cut -f 2
    liuxin
    haoliang
    
    #包含bin/bash的行
    mac@MacBook-Air  ~/Desktop/ssh  grep bin/bash /etc/passwd
    _mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash
    #通过:分割的第五列
    mac@MacBook-Air  ~/Desktop/ssh  grep bin/bash /etc/passwd | cut -f 5 -d ":"
    Setup User
    

    • printf
    • awk
    • grep
      • -v 取反

五、逻辑判断语句

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/709FED10-B1FA-4C82-BDAB-890B9BFFB681.png)

  • -e 文件是否存在

  • -d 目录是否存在

    test -e /root/bin/install.log
    test -d /root
    
    [-e /root/bin/install.log]
    [-d /root]
    

  • 文件权限判断![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/26D69B84-DA59-46BF-BB4F-5E56861F8CE8.png)

  • 两个文件之间进行比较

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/10E950D3-F1F7-4127-BC5F-9A50BB809069.png)

  • 两个整数之间比较

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/E55462AA-4FC2-4CC5-9982-84210E1CCE84.png)

  • 字符串判断

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/17CAD21B-0719-4764-8A2E-EF4C9767CFED.png)

  • 多重判断![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/5107B155-D778-44F1-ADCF-F5EA62B13314.png)

六、流程控制语句

  • 单分支if语句

    if [];then
      程序
    fi
    ---
    if[]
      then
      程序
    fi
    
    read -p "请输入你的项目名:" projectName
    read -p "请输入动物名:" groupId
    read -p "请输入服务名:" categoryId
    echo -e "\e[1;31m 正在为你创建 $projectName 项目... \e[0m "
    pro=$projectName
    animal=$groupId
    category=$categoryId
    mkdir $pro && $pro创建完整 || $pro 创建失败
    cd $pro
    mkdir src
    cd src
    mkdir main
    mkdir test
    cd main
    mkdir java
    mkdir resources
    cd java
    mkdir $animal
    cd $animal
    mkdir $category
    mkdir domain
    mkdir base
    mkdir config
    mkdir dao
    mkdir manager
    mkdir modle
    mkdir rest
    mkdir service
    mkdir util
    cd dao
    mkdir impl
    cd ../modle
    mkdir do
    mkdir dto
    mkdir vo
    cd ../service
    mkdir impl
    cd ../../resources
    mkdir config
    cd ../
    touch application.properties
    touch application-test.properties
    touch application-pro.properties
    touch application-stg.properties
    


shell正式开始

第一个脚本

#!/bin/bash
#创建项目
read -p "请输入你的项目名:" projectName
read -p "请输入动物名:" groupId
read -p "请输入服务名:" categoryId
if [-z $projectName]
    then
    read -p "请检查输入的内容是否为空,输入yes退出" -n 1 pw
fi

if [-z $groupId]
    then
    read -p "请检查输入的内容是否为空,输入yes退出" -n 1 pw
fi
    
if [-z categoryId]
    then
    read -p "请检查输入的内容是否为空,输入yes退出" -n 1 pw
fi
pro=$projectName
animal=$groupId
category=$categoryId
mkdir $pro
cd $pro
mkdir src
cd src
mkdir main
mkdir test
cd main
mkdir java
mkdir resources
cd java
mkdir $animal
cd $animal
mkdir $category
mkdir domain
mkdir base
mkdir config
mkdir dao
mkdir manager
mkdir modle
mkdir rest
mkdir service
mkdir util
cd dao
mkdir impl
cd ../modle
mkdir do
mkdir dto
mkdir vo
cd ../service
mkdir impl
cd ../../../resources
mkdir config
touch application.properties
touch application-test.properties
touch application-pro.properties
touch application-stg.properties
cd ../../../
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
echo -e "\033[41;37m 已经为你创建完成 $pro 项目 \033[0m"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • Bash内置基本变量 PWD : 显示当前的工作目录 OLDPWD : 显示上一次的工作目录 ~:用户家目录 - ...
    魏镇坪阅读 1,512评论 0 6
  • 1. shell脚本: 包含一些命令或声明,并符合一定格式的文本文件  格式要求:首行shebang(#!)机制...
    尛尛大尹阅读 1,873评论 0 1
  • 数字比较 ``` -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if...
    飞翔你我阅读 280评论 0 0
  • [转自]http://www.jb51.net/article/52586.htm做了小幅修改 本文列举BASH ...
    咕咕鷄阅读 2,583评论 0 1
  • Shell简介 Shell会执行用户输入的命令,并且在屏幕上显示执行的结果。 单从字面的意思上理解,Shell的本...
    故事狗阅读 1,727评论 2 10