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.

你可能感兴趣的:(shell,user,File,bash,2010)