1,如果創建shell腳本? 使用任意文本編輯軟體,一般為vim,創建.sh結尾的文件,在文件的最開頭用 #!/bin/bash 註明shell的類型 如: 2,如何執行shell? >把shell文件當做bash的命令行參數 >給shell文件添加可執行許可權,我這裡已經添加過了,使用命令( chm ...
1,如果創建shell腳本?
使用任意文本編輯軟體,一般為vim,創建.sh結尾的文件,在文件的最開頭用 #!/bin/bash 註明shell的類型
如:
ghostwu@dev:~/linux/shell$ cat how_to_use_shell.sh #!/bin/bash ls /
2,如何執行shell?
>把shell文件當做bash的命令行參數
ghostwu@dev:~/linux/shell$ ls -l total 4 -rwxrwxr-x 1 ghostwu ghostwu 17 5月 28 18:14 how_to_use_shell.sh ghostwu@dev:~/linux/shell$ bash how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www ghostwu@dev:~/linux/shell$ /bin/bash how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www ghostwu@dev:~/linux/shell$ bash ~/linux/shell/how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$ sh how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www
>給shell文件添加可執行許可權,我這裡已經添加過了,使用命令( chmod a+x 腳本文件路徑 )
ghostwu@dev:~/linux/shell$ ./how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www ghostwu@dev:~/linux/shell$ ~/linux/shell/how_to_use_shell.sh backup cdrom home lib64 mnt proc sbin sys var bin dev initrd.img lost+found opt root snap tmp vmlinuz boot etc lib media patch run srv usr www ghostwu@dev:~/linux/shell$
3,單雙引號跟php是一樣的,單引號不解釋變數,雙引號會解釋變數
ghostwu@dev:~/linux/shell$ echo "learning shell program with ghostwu" learning shell program with ghostwu ghostwu@dev:~/linux/shell$ echo 'learning shell program with ghostwu' learning shell program with ghostwu ghostwu@dev:~/linux/shell$ echo learning shell program with ghostwu learning shell program with ghostwu ghostwu@dev:~/linux/shell$ name=ghostwu ghostwu@dev:~/linux/shell$ echo $name ghostwu ghostwu@dev:~/linux/shell$ echo "$name" ghostwu ghostwu@dev:~/linux/shell$ echo '$name' $name ghostwu@dev:~/linux/shell$ echo $name ghostwu
4,-n,不會轉義換行符。-e,會轉義字元
ghostwu@dev:~/linux/shell$ echo -n "ghostwu" ghostwughostwu@dev:~/linux/shell$ man echo ghostwu@dev:~/linux/shell$ echo "1\t2\t3" 1\t2\t3 ghostwu@dev:~/linux/shell$ echo -e "1\t2\t3" 1 2 3
5,列印彩色輸出
在終端中生成彩色輸出相當好玩,我們可以使用轉義序列來實現。
每種顏色都有對應的顏色碼。比如:重置=0,黑色=30,紅色=31,綠色=32,黃色=33,藍
色=34,洋紅=35,青色=36,白色=37。
要列印彩色文本,可輸入如下命令:
echo -e "\e[1;31m This is red text \e[0m"
\e[1;31 將顏色設為紅色, \e[0m 將顏色重新置回。只需要將 31 替換成想要的顏色碼就可以了。
要設置彩色背景,經常使用的顏色碼是:重置=0,黑色=40,紅色=41,綠色=42,黃色=43,
藍色=44,洋紅=45,青色=46,白色=47。
要列印彩色文本,可輸入如下命令:
echo -e "\e[1;42m Green Background \e[0m"
ghostwu@dev:~/linux/shell$ echo "\e[1;31m Hello Ghostwu \e[0m" \e[1;31m Hello Ghostwu \e[0m ghostwu@dev:~/linux/shell$ echo -e "\e[1;31m Hello Ghostwu \e[0m" Hello Ghostwu ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m" Hello Ghostwu ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m!" Hello Ghostwu !
這個要截圖,才能看出效果
變數:
在Bash中,每一個變數的值都是字元串。
無論你給變數賦值時有沒有使用引號,值都會以字元串的形式存儲
5,反引號(數字1左邊的那個鍵),表示引用命令的執行結果
ghostwu@dev:~/linux/shell$ ls how_to_use_shell.sh ghostwu@dev:~/linux/shell$ str=`ls` ghostwu@dev:~/linux/shell$ echo $str how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ echo str str
註意:echo $str 與 echo str。前面表示str變數,後面表示字元串str
反引號的另一種等價寫法,用小括弧括起來: $()
ghostwu@dev:~/linux/shell$ echo str2 str2 ghostwu@dev:~/linux/shell$ str2=$(ls) ghostwu@dev:~/linux/shell$ echo $str2 how_to_use_shell.sh
str2=$(ls):取得ls命令執行後的結果賦值給str2這個變數【註意:變數=值, 表示變數賦值,或者改寫變數的值,要使用變數的值(訪問變數的值)在變數前面用$】
ghostwu@dev:~/linux/shell$ str=`date "+%F"` ghostwu@dev:~/linux/shell$ echo $str 2018-05-28
ghostwu@dev:~/linux/shell$ str2=$(date "+%F") ghostwu@dev:~/linux/shell$ echo $str2 2018-05-28
變數引用的應用:可以把變數返回的值,拿來作為其他的應用,如時間的返回值,常用來備份文件
ghostwu@dev:~/linux/shell$ tar czvf `date "+%F"`_shell.tar.gz how_to_use_shell.sh how_to_use_shell.sh ghostwu@dev:~/linux/shell$ ls 2018-05-28_shell.tar.gz how_to_use_shell.sh
6,引用命令行的參數,用$1..$9,大於10用大括弧括起來,如:${10}
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh #!/bin/bash echo $1 $2 $3 ${10} ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..z} a b c j
給var.sh傳入26個字母作為參數, a--->$1,b--->$2, c----->$3, j---->$10
7,$0表示腳本本身
>如果用bash單純執行腳本,$0就是腳本的名稱
>如果用全路徑執行腳本,那麼$0就是腳本的名稱+路徑
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh var.sh ghostwu@dev:~/linux/shell/how_to_use_var$ bash ~/linux/shell/how_to_use_var/var.sh /home/ghostwu/linux/shell/how_to_use_var/var.sh
8,dirname獲取腳本的路徑,basename獲取腳本名稱
ghostwu@dev:~/linux/shell/how_to_use_var$ dirname ~/linux/shell/how_to_use_var/var.sh /home/ghostwu/linux/shell/how_to_use_var ghostwu@dev:~/linux/shell/how_to_use_var$ basename ~/linux/shell/how_to_use_var/var.sh var.sh
9,$# 獲取參數的個數
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh #!/bin/bash echo $# ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..j} 10
10,判斷參數的個數,給出一些提示信息
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a usage:/bin/bash var2.sh arg1 arg2 ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a b a b ghostwu@dev:~/linux/shell/how_to_use_var$ cat var2.sh #!/bin/bash if [ $# -ne 2 ] then echo "usage:/bin/bash $0 arg1 arg2" exit 1 fi echo $1 $2
11,set -- 設置位置參數,跟命令行傳參差不多
ghostwu@dev:~$ set -- hello ghost wu ghostwu@dev:~$ echo $# 3 ghostwu@dev:~$ echo $1 hello ghostwu@dev:~$ echo $2 ghost ghostwu@dev:~$ echo $3 wu
12,$@, $*,不加引號時,輸出所有參數
ghostwu@dev:~$ set -- hello ghost wu ghostwu@dev:~$ echo $# 3 ghostwu@dev:~$ echo $1 hello ghostwu@dev:~$ echo $2 ghost ghostwu@dev:~$ echo $3 wu ghostwu@dev:~$ echo $* hello ghost wu ghostwu@dev:~$ echo $@ hello ghost wu ghostwu@dev:~$ for i in $*; do echo $i; done hello ghost wu ghostwu@dev:~$ for i in $@; do echo $i; done hello ghost wu
加雙引號時,在迴圈遍歷的情況下:"$*" 所有參數當做一個參數。 "$@"輸出所有參數
ghostwu@dev:~$ echo "$*" hello ghost wu ghostwu@dev:~$ echo "$@" hello ghost wu ghostwu@dev:~$ for i in "$*"; do echo $i; done hello ghost wu ghostwu@dev:~$ for i in "$@"; do echo $i; done hello ghost wu
下麵的例子,相當於加引號的 "$@"
ghostwu@dev:~$ for i;do echo $i; done hello ghost wu
shift:將位置參數左移
ghostwu@dev:~$ echo $# $1 $2 $3 3 hello ghost wu ghostwu@dev:~$ shift ghostwu@dev:~$ echo $# $1 $2 $3 2 ghost wu
13,$? 獲取上一條命令的執行狀態返回值( 0 為成功,非0為失敗 )
ghostwu@dev:~$ pwd /home/ghostwu ghostwu@dev:~$ echo $? 0 ghostwu@dev:~$ cd /root bash: cd: /root: Permission denied ghostwu@dev:~$ echo $? 1