Bash Shell学习笔记三
1.eval的含義
eval實際上是對后面的算式或者表達式執行兩次解釋。
?
例如
a=sc
bsc=feiye
echo $a
eval echo "$"b$a
?
最后一句實際上是執行了2次。
?
第一次是得到 echo $bsc,再執行一次就得到了feiye
2.怎樣把命令輸出賦值給變量
1.將$()將命令括起來。
如
a=$(whoami)
echo $a
2.將``將命令括起來。[注意:`是~號對應的鍵]
如
a=`whoami`
echo $a
3.怎樣得到文件中的某行
1.如何是第一行或者最后一行,可以用 head -n 1或者tail -n 1得到
?
2.如果是想要得到文件中的某個滿足條件的行,可以用while read line結構的程序。
如
file=/home/test/input.dat
cat $file | while read line
do
?? if [ echo $line|grep test -q ]
?? do
?????? echo "get it"
??? fi
done
4.怎樣讀取文件中的字符值并賦值給變量
1.用while read line讀取文件中的每行,用 函數讀取變量
如
line=“test string”
readstr()
{
read var1 var2
echo $var1
echo $var2
}
echo $line|readstr
?
2.用awk實現
如
line=test string
var1=`echo $line|awk '{print $1}'`
var2=`echo $line|awk '{print $2}'`
5.如何去掉回車與換行
使用 tr -d '/n/r'
6.shell中如何判斷字符串匹配
1.利用grep
如:
echo $str1|grep "*g09?" -q
echo $?
判斷str1字符中是否匹配后面的模式,如果匹配則$?的值為0,否則為非0
?
2.利用 =~
如:
if [[ " sc test cs" =~ " test " ]]
then
echo "true"
else
echo "false"
fi
?
7.shell中如何判斷數字相等
1.用(( ))將需要比較的數字括起來。
(($num1 == $num2)) (($num1 != $num2)) (($num1 >= $num2))
(($num1 <= $num2)) (($num1 > $num2)) (($num1 < $num2))
?
2.用比較符號 -eq -gt -ge -lt -le -ne來比較
[ $num1 -eq $num2 ] (=) [ $num1 -gt $num2 ] (>) [$num1 -ge $num2 ](>=)
[ $num1 -lt $num2 ] (<) [ $num1 -le $num2 ] (<=) [ $num1 -ne $num2 ] (!=)
8.如何在shell函數中返回值以及如何取shell函數的返回值
在函數中返回值的方法有多種。
?
1.利用全局變量,在子函數中改變全局變量,結果將會保存到函數結束。
?
2.在函數中通過result語句來返回值,但是只能返回一個0-127范圍的數值,用 &? 來獲取函數執行后的結果。
?
3.通過echo 方法
?
通過 &?來取得一個函數的返回值,如果函數中沒有返回值,則該值為函數中最后一個命令的執行結果。
?
shell命令的執行結果,值為0表示為真,值非0表示為假。
9.如何將子shell的變量傳遞給父shell,或者將父shell變量傳遞到子shell
父shell變量傳遞到子shell只需要用export 就可以了,子shell對變量的改變將不會影響父shell。
?
子shell變量傳遞到父shell,還沒有找到完美的,我知道暫時只能通過臨時文件來傳遞。
?
?
10.文件或目錄的s權限與t權限
一般文件只有3中權限 w,r,x,分別表示可寫,可讀,可執行.
某些特殊文件還有s權限或者t權限。
例如
ll /usr/bin/passwd
-rwsr-xr-x 1 root shadow 79336 2007-05-04 19:28 /usr/bin/passwd
ll /
drwxrwxrwt? 34 root root 2488 2010-01-30 21:20 tmp
我們看到passwd的User位置有個s權限,它表示運行它的用戶將會以該文件的屬主身份來執行。
所以普通用戶可以運行passwd來修改自己的命令(雖然/etc/passwd是root用戶的)
同樣的在Group位置也可以設置s權限,它同suid類似,運行它的用戶將會以該文件的組身份來執行。
t權限只對目錄有效果,它的作用就是所有用戶都可以自由建立文件和文件夾,但是只能刪除自己建立的文件或者文件夾,
這對于/tmp的意義是非常重要的。
?
對文件加suid(4)權限 chmod 4755 file
對文件加sgid(2)權限 chmod 2755 file
對文件加t權限(1)權限 chmod 1777 file
對目錄加suid,sgid,t權限 chmod 7777 directory
?
需要注意的是
1.suid,guid只能對應于二進制文件,對shell無效
2.guid和uid,除了上面所說的作用外,guid還一般用來使某個目錄內創建的文件都具有某個組權限。
3.s權限的前提是x權限,如果文件沒有x權限而被賦予s權限,將會顯示大寫的S.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Bash Shell学习笔记三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蔚来:已在中国累计布局 1313 座换电
- 下一篇: 三年亏损170亿 昔日新能源车一哥“北汽