沒有學不會的技術
1 位置參數和特殊變數:$**
$0 相當於C語言main函數的argv[0],表示指令碼本身檔名稱
$1、$2 相當於C語言main函數的argv[1]、argv[2]…,表示指令碼檔名後的第1…個參數
$# 相當於C語言main函數的argc -1,表示參數個數
$@ 表示所有參數列表
$* 表示所有參數列表
$? 表示上一條命令的Exit Status
$$ 表示當前進程號,指令碼執行時的PID
shift n 表示位置參數左移,如shift 2 表示$1、$2丟棄,後續的位置參數變成$1、$2…
綜合範例:
建立argv.sh檔案,輸入如下內容:
echo "第一個參數:"
echo $1
echo "第二個參數:"
echo $2
echo "第三個參數:"
echo $3
echo "參數總個數:"
echo $#
echo "所有參數:"
echo $@
shift 2
echo "所有參數:"
echo $*
echo "上一條命令的執行狀態:"
echo $?
echo "當前進程號:"
echo $$
在終端執行可執行檔案,檢視輸出結果:
lihoon@lihoon:~/code/Linux_shell$ ./argv.sh aa bb cc dd ee ff
指令碼名稱
./argv.sh
第一個參數:
aa
第二個參數:
bb
第三個參數:
cc
參數總個數:
6
所有參數:
aa bb cc dd ee ff
所有參數:
cc dd ee ff
上一條命令的執行狀態:
0
當前進程號:
10084
2 echo——顯示文字行或者變數:echo [option] string
-e——解析跳脫字元
-n——不回車換號(預設情況下,echo的內容後面會跟一個回車換行)
lihoon@lihoon:~/code/Linux_shell$ echo "hello\n\n"
hello\n\n
lihoon@lihoon:~/code/Linux_shell$ echo -e "hello\n\n"
hello
lihoon@lihoon:~/code/Linux_shell$ echo -n "hello"
hellolihoon@lihoon:~/code/Linux_shell$
3 printf——列印文字:printf string
hellolihoon@lihoon:~/code/Linux_shell$ printf "hello\n"
hello
4 管道:通過 | 把一個命令的輸出傳遞給另一個命令做輸入
lihoon@lihoon:~/code/Linux_shell$ ls -l | grep "argv.sh"
-rwxrw-r-- 1 lihoon lihoon 327 8月 9 21:11 argv.sh
5 tee——把結果輸出到標準輸出,另一個符文輸出到相應的檔案
-a——在原來輸出檔案的基礎上追加其他輸出
lihoon@lihoon:~/code/Linux_shell$ df -k | awk '{print $1}' |grep -v "檔案系統" | tee a.txt
udev
tmpfs
/dev/nvme0n1p6
tmpfs
tmpfs
tmpfs
/dev/loop2
/dev/nvme0n1p4
/dev/nvme0n1p7
/dev/nvme0n1p1
/dev/loop17
tmpfs
tmpfs
/dev/sda1
lihoon@lihoon:~/code/Linux_shell$ cat a.txt
udev
tmpfs
/dev/nvme0n1p6
tmpfs
tmpfs
tmpfs
/dev/loop2
/dev/nvme0n1p4
/dev/nvme0n1p7
/dev/nvme0n1p1
/dev/loop17
tmpfs
tmpfs
/dev/sda1
6 檔案重定向
cmd > file 把標準輸出重定向到新檔案中
cmd >> file 把標註輸出追加到原來的檔案中
cmd > file 2 > &1 把標準出錯重定向到檔案中
cmd >> file 2 > &1 把標準出錯追加到檔案中
cmd < file1 > file2 把輸入輸出都定向到檔案裡
cmd < &fd 把檔案描述符fd作爲標準輸入
cmd > &fd 把檔案描述符fd作爲標準輸出
cmd < &- 關閉標準輸入
# 重定向
lihoon@lihoon:~/code/Linux_shell$ date > file1
lihoon@lihoon:~/code/Linux_shell$ cat file1
2020年 08月 09日 星期日 22:23:09 CST
# 追加重定向
lihoon@lihoon:~/code/Linux_shell$ ls >> file1
lihoon@lihoon:~/code/Linux_shell$ cat file1
2020年 08月 09日 星期日 22:23:09 CST
argv.sh
a.txt
command.sh
file1
for.sh
f.sh
note.txt
out
sample.sh
shell筆記1.md
Shell筆記2.md
Shell筆記3.md
temp
temp.sh
temp.txt
while.sh
# 標準錯誤重定向
lihoon@lihoon:~/code/Linux_shell$ date -t > file1 2>&1
lihoon@lihoon:~/code/Linux_shell$ cat file1
date: 不適用的選項 -- t
Try 'date --help' for more information.
# 輸入輸出都重定向
lihoon@lihoon:~/code/Linux_shell$ cat < file1 > file2
lihoon@lihoon:~/code/Linux_shell$ cat file2
date: 不適用的選項 -- t
Try 'date --help' for more information.
安得廣廈千萬間