1. 程式人生 > 其它 >IDEA配置maven引入包時報Unable to import maven project: See logs for details 錯誤的解決辦法

IDEA配置maven引入包時報Unable to import maven project: See logs for details 錯誤的解決辦法

shell介紹

shell介於核心與使用者之間,負責命令的解釋。

shell型別

[root@localhost ~]# cat /etc/shells   檢視shell種類
/bin/sh                    是bash shell的一個快捷方式
/bin/bash                 bash shell 是大多數Linux預設的shell,功能齊全
/usr/bin/sh               
/usr/bin/bash
/bin/tcsh                  是csh的增強版 ,完全相容csh
/bin/csh                   具有C語言風格的一種shell 
/sbin/nologin 非互動 ,不能登入作業系統

shell指令碼格式

#!/bin/bash
//第一行 #!魔法字元,指定程式碼的執行程式,即告訴系統用什麼直譯器(用那種shell)
//指令碼基本資訊描述
#name:名字
#describe:描述用途
#Path:存放路徑
#usage:用法
#update:更新時間
//指令碼具體內容
.......

shell指令碼執行方法

 標準執行:

shell指令碼必須要有可執行許可權

chmod +x 指令碼檔案 (加可執行許可權)

絕對路徑執行:/shell10/shell1.sh

相對路徑執行:./shell1.sh

非標準執行:

shell指令碼可以不要可執行許可權

bash shell1.sh

bash -x 指令碼名 檢視指令碼執行過程

bash -n 指令碼名 檢視指令碼是否有語法錯誤

source shell1.sh

. shell1.sh(.後有個空格)

****除了絕對路徑執行外,其他的執行命令必須在指令碼所在目錄下執行

 

bash的基本特性

常見快捷鍵

ctrl +c 終止某個操作

  z   將前臺執行的程式掛到後臺

  d 退出 等於exit

  1 清屏等於clear

  a 游標移動到命令列最前端

  e 游標移動到命令列最後端

  u 刪除游標前所有字元

  k刪除游標後所有字元

  r 搜尋歷史命令(輸入關鍵字即可)

常用萬用字元

*  :匹配0或多個字元    

? :匹配任意單個字元

[list] :匹配[list]中的任意單個字元或者一組單個字元  file[abc]  匹配filea或fileb或filec, file[1-47] 匹配file1到file4和file7 (-必須後邊的大於前邊的)

[!list] :匹配除[!list]中的任意單個字元 或一組單個字元[!abc]  匹配除filea、fileb、filec 外的任意file加一個字元

{string1,string2,.......} :匹配string1,string2 ,或更多字元  file{3..6}(必須要兩個點) 匹配file3 file4 .....file6 or file{3,4,5,6}

例子:有兩個檔案file1 ,file11

ls -l fi*  或者 flile*能匹配到兩個檔案  ls -l file1* 能匹配到file1

但ls -l file1? 匹配不到file1 且 ls -l fil? 匹配不到連個檔案 只有ls -l file? 匹配到file1 ls -l file1?匹配到file11 

bash中的引號

雙引號""  :會把引號內的內容當成整體來看,允許通過$符合引用其他變數值

單引號''  : 會把引號內的內容當成整體來看,禁止引用其他變數值,shell中特殊符號都被視為普通字元

反撇號`` :反撇號和$()一樣,引號或括號裡的命令會優先執行,如果存在巢狀,反撇號不能用

echo "$(date +%F)" = echo "`date +%F`"

echo `echo "`date +%F`"`  這就是巢狀,是不允許的會報錯,可以改為 echo  $(echo "`date +%F`")

重新命名檔案

mv 只能重新命名單個檔案 (多個就會當成移動檔案)

把file1-3重新命名為text1-3

rename  file text  file?

把file11-13 重新命名為text11-13

rename file1 text file1? or   rename file text file??

變數的定義

1、變數的分類

本地變數:當前使用者自定義的變數,當前程序中有效,其他程序即當前的子程序無效。

環境變數:當前程序有效,並且能夠被子程序呼叫

全域性變數:全域性所有使用者和程式都能呼叫,且繼承、新建的使用者也能呼叫。

檢視當前使用者的環境變數: env |grep ^A

檢視當前使用者的所有變數:set

臨時將臨時(本地)變數變成環境變數:export A=hello

永久生效:vim /etc/profile 末尾加上 export A=hello 重新載入此檔案source /etc/profile 

第三方軟體配置環境變數

which 軟體名 找到命令所在檔案

vim /etc/profile 末尾加上

export PATH="$PATH:/usr/local/mysql/bin:第二個路徑" (加export是環境變數,不加則是本地變數)

系統變數(內建bash中的變數):shell本身已經固定好了其名字和作用

$? :上一條命令執行後的返回狀態,返回值為0表示正常,非零為出異常或出錯

0 命令成功結束
1 通用未知錯誤
2 誤用shell命令
126 找到命令,但命令不可執行(許可權不夠)
127 沒找到命令
128 無效退出引數
128+x Linux 訊號x的嚴重錯誤
130 Linux 訊號2 的嚴重錯誤,即命令通過SIGINT(Ctrl+C)終止
255 退出狀態碼越界

$$ :當前所在程序的程序號   kill -9 `echo $$` 殺死當前程序

$! :後臺執行的最後一個程序號  echo $!

!$:呼叫最後一條命令歷史中的引數

!!:呼叫最後一條歷史命令

$#:指令碼後面接的引數個數

$*:指令碼後面所有引數,引數當成一個整體輸出,每一個變數引數之間以空格隔開

$@:指令碼後面所有的引數,引數是獨立的,也是全部輸出

$0:當前執行的程序/程式名

$1~$9:位置引數變數

${10}~${n} :擴充套件位置引數變數,第十個位置變數必須用{}括起來

變數定義

1、預設情況下,shell裡定義變數是不分型別的,可以給變數賦予任何型別的值;等號兩邊不能有空格,對於有空格的字串作為賦值時,要用引號引起來。變數名=變數值

2、變數的獲取方式:$變數名

A=123456

echo $A or echo ${A}

都顯示:123456

echo ${變數名:從第幾個字元擷取:擷取的字元個數}

echo ${A:2:3}  ***第二段為下標,從0開始。下標0對應A中第一個字元,第三段表示顯示幾個字元***

顯示為:345

unset 變數名 :刪除變數

變數定義規則

shell中變數名區分大小寫,A =123 a=456 這是兩個變數。

shell中變數重新賦值後會覆蓋,先定義A=123,後定義A=456 最後A的變數值為456

shell中變數名不能以數字開頭,也不能有特殊字元,如? $ *等

shell中可以把一個命令的執行結果賦值給一個變數

自己定義有型別的變數

declare 選項 變數名=變數值

  • -f  僅顯示函式。
  • -r  將變數設定為只讀。
  • -x  指定的變數會成為環境變數,可供shell以外的程式來使用。相當於用export 變數名 進行匯出
  • -i  [設定值]宣告變數為整數型   "+r"則是取消變數所設的屬性。
  • -a    指定為索引陣列(普通陣列)
  • -A   指定為關聯陣列

如:declare -r A=123  :設定變數為只讀,此時,想要再設定A變數進行覆蓋是不行的。unset A也不能刪除變數

取消只讀:

# cat << EOF| gdb
> attach $$
> call unbind_variable("test")   test為變數名
> detach
> EOF

陣列

普通陣列:只能使用整數作為資料索引(元素下標)

關聯陣列:可以使用字串作為陣列索引(元素的下標)

普通陣列定義:用括號來表示數字,陣列元素(變數)用空格符號分割開,

定義陣列的一般形式為:

變數名=變數值

array[0]=v1   陣列下標0賦值為v1

array[1]=v2  陣列下標1賦值為v2

array[2]=v3

or

array=(v1 v2 v3)  陣列下標0 ,1, 2,賦值為 v1 ,v2, v3 

array1=(`cat /etc/passwd`) or array1=($(cat /etc/passwd))把passwd中每一行賦值給array1陣列

array2=(1 2 3 "hello word" [10]=linux)   ""裡為一個元素  []=元素 :指定元素下標

echo ${array[*]} :獲取陣列所有元素,也可以用@

echo ${array[1]} :獲取陣列下標1的元素

echo ${array[*]:1:2} :獲取陣列從下標1開始,後兩個下標的元素,即下標1下標2的值,是v2 v3

陣列變數也會覆蓋(只會覆蓋再定義的下標的元素)

如:再定義 array[0]=m1 array[10]=m2

則陣列array='(array[0]=m1 array[1]=v2 array[2]=v3 array[10]=m2)'

獲取數組裡的元素個數:echo ${#array[*]}  /陣列長度

獲取數組裡有元素值的下標號 :echo ${!array[*]}

關聯陣列定義:

首先宣告關聯陣列

declare  -A array10

陣列賦值:

陣列名[索引下標]=變數值

一次賦一個值:

array10[linux]=one

array10[java]=two

一次賦多個值:

array10=([linux]=one [java]=two [name]="feng xue")

檢視關聯陣列:

declare -A

echo ${array10[*]} :獲取關聯陣列的所有元素,其是無序的 。@也可

echo ${array10[name]} :獲取固定陣列下標的元素

echo ${#array10[*]} :獲取關聯數組裡的元素個數/陣列長度

echo ${!array10[*]} :獲取關聯數組裡的下標值

互動式定義變數的值 read 讓使用者去定義變數的值

-p 定義提示資訊

-n 字元數(限制變數值的字元)

-s 不顯示

-t 超時(預設單位為秒)(限制使用者輸入變數的超時時間)

read -p "提示資訊如:input your name:"  name

read -s -p "input your passwd:"  passwd       你輸入的字元不在螢幕上顯示

read -n 3 "input your name:"  name 只能輸入三個字元如abc

read -t 3 "input your name:"  name    三秒後退出輸入介面,三秒內沒有回車確認不會給變數賦值

#read A B

hello world

上邊A賦值hello B賦值world

#read A B < 1.txt 從檔案中獲取值 1.txt內容為hello world 

上邊A賦值hello B賦值world

注意:read A B 賦值多個變數時 只有遇到空格後才會分別賦值兩個變數,若1.txt內容為hello:world 變數A值為hello:world B為空

其他變數(擴充套件)

1、取出一個目錄下的目錄和檔案:dirname和basname

2、變數內容的刪除和替換

  一個"%"代表從右往左去掉一個/key/

  兩個"%%"代表從右往左去掉最大的一個/key/

  一個"#"代表從左往右去掉一個/key/

  兩個"##"代表從左往右去掉最大的一個/key/  

${變數名#關鍵字元} 如果變數內容從頭開始的資料符合"關鍵字元",則將符合的最短資料刪除
${變數名##關鍵字元} 如果變數內容從頭開始的資料符合"關鍵字元",則將符合的最長資料刪除
${變數名%關鍵字元} 如果變數內容從尾開始的資料符合"關鍵字元",則將符合的最短資料刪除
${變數名%%關鍵字元} 如果變數內容從尾開始的資料符合"關鍵字元",則將符合的最長資料刪除

#A=/root/desktop/shell/mem.txt  定義變數為此目錄

#dirname $A   取出目錄

/root/desktop/shell

#basname $A  取出檔案

mem.txt

#url=www.taobao.com

#echo ${#url}  獲得變數長度

#echo ${url#*.}   #從左往右最短匹配  *.表示關鍵字

taobao.com

#echo ${url##*.}  #從左往右最長匹配

com

#echo ${url%.*}         #從右往左最短匹配

www.taobao

#echo ${url%%.*}  #從右往左最長匹配

www

替換

${變數名/舊字串/新字串} 表示若變數內容符有舊字串則第一個舊字串會被新字串替換
${變數名//舊字串/新字串} 表示若變數內容有舊字串則全部舊字串會被新字串替換

 

#echo ${url/taobao/wangyi}

www.wangyi.com

#echo ${url//o/i}

www.taibai.cim

Shell變數的替代

給Shell變數設定預設值的格式為${變數名-新的變數值}or${變數名=新的變數值},如果變數名沒有被賦值,會使用新的變數值替代,如果已被賦值(包括空值),則該值不會被替代。

${變數名:-新的變數名}
這樣如果變數為空值也會被替代

 

 簡單的四則運算

算術運算:預設情況下,shell就只能支援簡單的整數運算

+ - * / %   (/求商 %取餘數)

bash shell中算數運算有四種方式

1、使用$(())   echo $((5/10))   得0 echo $((5%10))  得5

2、使用$[]  echo $[5*10]   50  echo $[5/10]   0

3、使用expr 外部程式  exper 3 +(-,/,%) 2   expr 2  \* 3  等於6   乘號比較特殊需要轉義一下 數字 符號 數字間得有空格,不然就直接輸出字串:expr 2*3 輸出:2*3

4、使用let命令 let n=n+(-,%,/,*)1 等於 let n+(-,%,/,*)=1    let n=n**2(求n的2次方) let n=n**3(4,5,6....)(n的三(4,5,6...)次方) 

如何算小數 bc

echo 1+1.5 |bc  (跟bc的話,數字 符號 數字間可以沒有空格)

還可以直接輸bc進入其中計算

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2.4*4.5       (輸入計算)
10.8        (結果)
5/2
2
^C
(interrupt) Exiting bc.

i++與++i的區別

對變數值無影響:i=1,j=1,let i++ =let j++ 值是一樣的

對錶達式的值有影響:

let x=i++     i++ 先賦值後運算(先把i的值給x,i再加一)

let y=++j   ++j 先運算後賦值 (j先加一。再把j的值給y)

上邊i=2 j=2 但x=1,y=2