1.source指令
source 配置檔案 # 立即是配置檔案生效
. 配置檔案 # ./ 是目前檔案夾 .後加空格效果等于source
2.配置檔案
/etc/profile #對每個使用者起作用
/etc/profile.d/*.sh
/etc/bashrc
~/bash_profile #每個使用者的配置檔案
~/.bashrc
~/.bash_logout #退出執行
PS1變量
umash
PATH
umask

3.登入提示資訊(issue隻對本機,如果issue.net遠端登入)


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

#!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 取反
- cut 字段提取
五、邏輯判斷語句

- -e 檔案是否存在
- -d 目錄是否存在
test -e /root/bin/install.log test -d /root [-e /root/bin/install.log] [-d /root]
- 檔案權限判斷
-
兩個檔案之間進行比較

-
兩個整數之間比較

-
字元串判斷

- 多重判斷
六、流程控制語句
-
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
第一個腳本
#!/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"