shell编程

举报
西魏陶渊明 发表于 2022/09/25 05:57:22 2022/09/25
【摘要】 1.source命令 source 配置文件 # 立即是配置文件生效 . 配置文件 # ./ 是当前文件夹 .后加空格效果等于source 2.配置文件 /etc/profile #对每个用户起作用 /etc/profile.d/*.sh /etc/bashrc ~/bash_profile ...

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"

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425275

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。