Bash Shell学习笔记二
1.||、&& 和&、|的區(qū)別
?
||和&&的執(zhí)行是從左到右,而&和|的執(zhí)行是兩邊到中間的(未實(shí)際測(cè)試,只能確認(rèn)它不是按順序執(zhí)行的)
||和&&的執(zhí)行時(shí),只要結(jié)果確定就停止,而&和|的執(zhí)行是計(jì)算所有值后才停止
||一般用來(lái)判斷條件滿足則執(zhí)行。例如 [[ $UID == 0 ]] || mkdir /test? ---只有root用戶才執(zhí)行mkdir /test
?
2.設(shè)置用戶新文件或文件夾的默認(rèn)權(quán)限
umask
umask其實(shí)是一個(gè)掩碼。
也有umask這樣一個(gè)命令,它是對(duì)用戶建立的文件的默認(rèn)屬性的定義。
該定義為:
假設(shè)umask為022.
則對(duì)于一個(gè)文件夾的話,它的默認(rèn)屬性為 777-022=755,這也就是我們平時(shí)建立文件夾的權(quán)限。
而對(duì)于一般的文件的話,則是用 666-022=644.
例如,在.bashrc 或者 .bash_profile中設(shè)置 ?umask 066
這樣用戶登錄后建立新文件夾的權(quán)限是 rwx--x--x-,新文件的權(quán)限為 rwx------
?
3.設(shè)置用戶新文件或文件夾的默認(rèn)組
vi /etc/passwd 或者 vi passwd
修改用戶的組ID為默認(rèn)的組,
如:
修改linfengfeiye:x:1009:1001::/home/user/liukejian:/bin/bash
將 1001改為100,則默認(rèn)組從1001對(duì)應(yīng)的組變?yōu)?00對(duì)應(yīng)的組
?
4.1>&2,2>&1,1>dev/null,2>/dev/null的意義
?
在Linux中,shell命令一共有3個(gè)標(biāo)準(zhǔn)輸入輸出,stdin,stdout,stderr,其中stdin默認(rèn)為鍵盤,其他的默認(rèn)為顯示器。
其中 stdin對(duì)應(yīng)為0,stdout對(duì)應(yīng)為1,stderr對(duì)應(yīng)為2
1>/dev/null表示輸出關(guān)閉,2>/dev/null表示輸入關(guān)閉
1>&2,表示將輸出合并到錯(cuò)誤輸出,2>&1表示將錯(cuò)誤輸出合并到標(biāo)準(zhǔn)輸出
?
5.Linux計(jì)算表達(dá)式的方法
?
方法一 ? :A=$[ 1 + 2 ]
方法二 ? :A=$((1+2))
方法三 ? :A = 'expr 1 + 2' 注意:A='expr 3 /* 4'?
方法四 ? :let A=1+2
?
6.修改Linux shell提示符
?
在.bashrc中導(dǎo)出PS1
例如:export PS1='/u@/h:/w /$ ' 顯示為?linfengfeiye@node2:~ $?
其中以/開始的字符的意義如下:
?
/d :代表日期,格式為weekday month date,例如:"Mon Aug 1"?
/H :完整的主機(jī)名稱。例如:我的機(jī)器名稱為:fc4.linux,則這個(gè)名稱就是fc4.linux?
/h :僅取主機(jī)的第一個(gè)名字,如上例,則為fc4,.linux則被省略?
/t :顯示時(shí)間為24小時(shí)格式,如:HH:MM:SS?
/T :顯示時(shí)間為12小時(shí)格式?
/A :顯示時(shí)間為24小時(shí)格式:HH:MM?
/u :當(dāng)前用戶的賬號(hào)名稱?
/v :BASH的版本信息?
/w :完整的工作目錄名稱。家目錄會(huì)以 ~代替?
/W :利用basename取得工作目錄名稱,所以只會(huì)列出最后一個(gè)目錄?
/# :下達(dá)的第幾個(gè)命令?
/$ :提示字符,如果是root時(shí),提示符為:# ,普通用戶則為:$
?
7.bash中 $#,$0,$1....$@ 的意義
?
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
?
$#:表示參數(shù)個(gè)數(shù)
$0:表示命令本身
$1:表示命令的第一個(gè)參數(shù)
$2:表示命令的第二個(gè)參數(shù) .... $@:表示參數(shù)列表8.同時(shí)執(zhí)行多個(gè)命令 第一種:用;來(lái)分隔命令,如 ls /home;echo "hello" 第二種:用&&或者&來(lái)分隔命令,對(duì)于&&,如果前面返回真才執(zhí)行后面,對(duì)于&,多個(gè)命令不會(huì)按照順序執(zhí)行。 第三種:用||來(lái)分隔,如果前面返回真則不會(huì)執(zhí)行后面命令。
9.Linux shell中 如何引用 變量的變量 例如 i=dest dest=hello
那么如何由i得到hello的應(yīng)用呢,顯然不能直接用$$i. 經(jīng)過(guò)測(cè)試和查閱,在SUSE Linux中,下面的是最終結(jié)果。
方法如下: eval echo "$"$i 也可以用eval echo /$$i,但是此方法只能在shell中輸入,如果在文件中引用則會(huì)沒(méi)有出現(xiàn)預(yù)期的結(jié)果。
10. Linux中fuser的使用
fuser -c 目錄路徑-----顯示目前使用這個(gè)目錄的進(jìn)程號(hào) fuser -v 目錄路徑-----顯示目前使用的目錄的進(jìn)程號(hào),用戶,用戶ID,命令 fuser -k 目錄路徑-----kill掉所有訪問(wèn)或是使用該目錄的進(jìn)程
總結(jié)
以上是生活随笔為你收集整理的Bash Shell学习笔记二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 直播带货更赚钱?新东方在线正式更名为东方
- 下一篇: torque安装笔记