【Linux】1.shell各个命令
生活随笔
收集整理的這篇文章主要介紹了
【Linux】1.shell各个命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
shell各個命令
1.符號參數
$# 傳遞到腳本的參數個數 $* 以一個單字符串顯示所有向腳本傳遞的參數。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 $@ 與$*相同,但是使用時加引號,并在引號中返回每個參數。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 $? 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 $! 后臺運行的最后一個進程的ID號 $$ 腳本運行的當前進程ID號 $0 執行的文件名 $1 傳入的第一個參數& shell命令以&結尾,就可以后臺運行,如:roscore& shift 命令每執行一次,變量的個數($#)減一,而變量值提前一位.也可以shift后加數字參數,如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當于shift 1。示例如下: #### 2.測試 shift 命令(x_shift.sh) until [ $# -eq 0 ] do echo "第一個參數為: $1 參數個數為: $#" shift done 執行以上程序x_shift.sh: $./x_shift.sh 1 2 3 4結果顯示如下:
第一個參數為: 1 參數個數為: 4 第一個參數為: 2 參數個數為: 3 第一個參數為: 3 參數個數為: 2 第一個參數為: 4 參數個數為: 1------------------------------------------------------------------ [ -e $var ] 文件是否存在 [ -d $var ] 是否是目錄 [ -f $var ] 是否是文件[[ $var1 = $var2 ]] 兩個字符串是否相同 [ $var -eq 0 ] 一個變量是否為0 [ $a -gt $b ] a 大于 b [ $a -lt $b ] a 小于 b -----------------------------------------------------------------3.set
set -e 執行的時候如果出現了返回值為非零,整個腳本 就會立即退出。 你寫的每個腳本都應該在文件開頭加上set -e,這句語句告訴bash如果任何語句的執行結果不是true則應該退出.
set +e 執行的時候如果出現了返回值為非零將會繼續執行下面的腳本
#!/bin/sh -e或#!/bin/bash -e 放在腳本第一行,和set -e功能也一樣
set -x 用于腳本調試,在liunx腳本中可用set -x就可有詳細的日志輸出.免的老是要echo了
4.read用法:
read既可以從鍵盤讀取,也可以讀取文件的一行. read a # 這個命令執行后,會要求從鍵盤輸入內容 1234 # 這是鍵盤輸入1234 echo $a # 會輸出 1234下面是read讀取文本文件的一行內容: while 循環讀取文本文件$release_conf的內容: 其中文本文件中全部存放的是變量賦值,如某一行:work_path=/home/zhu/ while read line;do eval "$line" done < $release_conf 然后,文件中的每一行變量就可以被后續的代碼使用了,因為執行了一句 eval "$line" ,他就把 work_path=/home/zhu/ 給執行了 --------------------------------------------------------------------------------------------------------------5.pgrep, pkill
pgrep -f abc 匹配出含abc的進程 并輸出進程的pid pkill -f abc 結束含abc的所有進程DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 詳解參考https://blog.csdn.net/davidhopper/article/details/78989369 pkill -SIGINT -f record 結束進程名包含record的進程,SIGINT與字符ctrl+c關聯,只能結束前臺進程 --------------------------------------------------------------------------------------------------------------6.dirname, basename
dirname命令去除文件名中的非目錄部分,刪除最后一個“\”后面的路徑 basename命令用于打印目錄或者文件的基本名稱,顯示最后的目錄名或文件名 dirname /etc/httpd/ # 結果為/etc dirname /etc/httpd/conf/httpd.conf #結果為 /etc/httpd/conf/ basename /etc/httpd/conf/httpd.conf # 結果為 httpd.conf --------------------------------------------------------------------------------------------------------------7.nohup
nohup rosbag record -O $bag_name --split --duration=30m -b 2048 $topic >/dev/null 2>&1 & nohup 是 no hang up 的縮寫,就是不掛斷的意思。nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那么可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。 nohup COMMAND & # 這樣就能使命令永久的在后臺執行 可參考 https://www.cnblogs.com/jinxiao-pu/p/9131057.html8.date
date +"%Y%m%d_%H_%M_%S" # 時間格式:20200519_20_38_47 echo `date +"%Y%m%d_%H_%M_%S"` # 輸出時間,必須加上``符號date +"%T" # %T 時間(只含時分秒,小時以24小時制來表示)。 echo `date +"%T"`%Y%m%d的參數可參考https://zhidao.baidu.com/question/484985079.htmla=date $a 對 echo $a # date a 錯b=`date` $b 錯 echo $b 對 b 對9.查看文件(夾)權限
ls -ld /dev/shm/ 查看/dev/shm/目錄(本身)的權限 ll /dev/shm/ 查看/dev/shm/目錄下的文件(夾)的權限, 包括隱藏文件(夾) ls -l /dev/shm/ 查看/dev/shm/目錄下的文件(夾)的權限,不包括隱藏文件(夾) ``#### 10.test ?```shell # 如果 ls -ld /dev/shm/ | grep drwxrwxrwx的輸出為空,就執行 chmod -R 777 /dev/shm/ if test -z "$(ls -ld /dev/shm/ | grep drwxrwxrwx)" ;thenchmod -R 777 /dev/shm/ fi11.開機自啟動數字小鍵盤numlock
# 如果該文件是可執行文件 if test -x /usr/bin/numlockx ; thennumlockx on fi12chown 將指定文件的擁有者改為指定的用戶或組
用戶可以是用戶名或者用戶 ID,組可以是組名或者組 ID,文件是以空格分開的要改變權限的文件列表,支持通配符。
chown 需要超級用戶 root 的權限才能執行此命令。
只有超級用戶和屬于組的文件所有者才能變更文件關聯組。非超級用戶如需要設置關聯組可能需要使用 chgrp 命令。
chown mdc.mdc file(dir) # 把file(或者目錄)的擁有者和組都改為mdc用戶
更多詳細用法參考 https://www.runoob.com/linux/linux-comm-chown.html
13.判斷文件夾是否存在,判斷是不是一個文件
##### 如果 /home/zhz/nas/abc目錄不存在,則執行 mount ##### 注意文件或者目錄需要用雙引號 if [ ! -d "/home/zhz/nas/abc" ];then # 注意 [ 的右邊有空格, ]的左邊有空格.mount -t nfs 192.168.1.163:/volume1_106/data /mnt/nas elseecho "dir exists!" fi不使用[]的話也可以使用test命令
if test ! -d "/home/zhz/nas/abc" ;then mount -t nfs 192.168.1.163:/volume1_106/data /mnt/nas elseecho "dir exists!" fi如果 /home/zhz/nas/def.txt是一個文件,則執行
軟鏈接不是文件,不能用-f來判斷
if [ -f "/home/zhz/nas/def.txt" ];thenrm -f def.txt fi# 如果 /home/zhz/abc是一個鏈接文件,則執行 if [ -L "/home/zhz/abc" ];thenrm -f def.txt fi14.把一段命令當做變量輸出
# 把命令用`()`括起來,然后在括號`()`前面加上`$`符號,最后把他們都用`" "`包起來即可. "$(ls -ld /dev/shm/ | grep drwxrwxrwx)"# 命令多重嵌套,先是 path_1 = dirname "${BASH_SOURCE[0],然后在 cd 到 $path_1,再執行 pwd顯示當前路徑,最后把他們當做變量賦值給 DIR DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"總結
以上是生活随笔為你收集整理的【Linux】1.shell各个命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】查准率、召回率、AP、mAP
- 下一篇: 【Linux】2.Linux sourc