1.3 Android常用的Linux命令
* man
man command ,man既manual手册,用于察看Linux命令的用法。例:man ls
* find
* grep
find用于查找目录,grep用于查找字符串,字符串可用正则表达式描述。
* xagrs
Linux支持多管道查询,用 | 隔开查询语句,上一条查询结果作为下一条查询的参数。
例:查找当前目录下,res目录中含有“hello Linux”所有的xml文件
find `find . -name res` -name "*.xml" | xargs grep hello Linux (注:`不是单引号,是1旁边符号,``之间是find 命令的嵌套查询)
* cat
用于连接文本内容并在Terminal中输出文本内容,不仅可以连接储存类文本,还可以是设备文件
* chmod
在Linux系统中,文件的访问者被分为3类,
u 文件的创建者
g 同文件创建者在同一组的用户
o 其他用户
权限分为读(r),写(w),执行(x),使用chmod给文件赋予不同文件访问者不同权限
例: chmod u+rwx,g+rx hellolinux.sh (用户的创建者有读写执行的权限,同组的用户有读执行权限)
用命令 ls -l 来察看文件的具体权限
例:ls -l hellolinux.sh
-rwxr-xr-x 1 cyc cyc 3976244 8月 11 2009
Linux用10位(bite)表示文件的执行权限,
bite 0:-/d 代表文件或目录,-代表文件,d代表目录
bite1-bite3:代表u权限
bite4-bite6:代表g权限
bite7-bite9:代表o权限
因此hellolinux.sh用户有读写执行权限同组和其他用户只有读和执行权限。
在部分Linux系统,比如基于Linux的Android,不识别rwx字符,它们采用1个8进制数来代表。
比如:chmod 777 helloLinux.sh 八进制7换算成2进制是111,即所有用户都有读写和执行的权限。
* ps,kill
ps列出所有的进程,根据列出进程的PID,可用kill -9 pid 命令来杀死进程。-9是一个固定的参数。
* export
用于将某个变量值作用于全局,例如将某路径赋值于环境变量PATH,export PATH,就可以在全局范围内使用该路径了。
1.4 Linux脚本备忘
什么是脚本,简单的说脚本是不需要编译的程序文件,c/java需要编译才能运行,所以他们不是脚本。
脚本有个2个共同的特点:
1:脚本内容均为字面上可以读懂的字面文件。
2:不同的脚本由不同的脚本解释器,解释执行,脚本语法由解释器的设计者定义。
Linux脚本分为两类,bash和perl,书中主要介绍了bash脚本。
一个简单例子:新建一文本文件,输入一下内容:
#!/bin/bash
ehco “Hello Bash” # print Hello Bash
保存文件名为HelloBash.sh,赋予执行权限chmod a+rwx HelloBash.sh
执行./HelloBash
就可看到在Termial中打印了Hello Bash 字符串。
#!/bin/bash 这是必须的告诉解释器,这是bash脚本,perl脚本则是#!/bin/perl
1.4.1 获取输入
输入分为3种,用户输入,前一个脚本的输出作为后一个脚本的输入,脚本函数的参数。书中只举例了用户输入的例子
$n n为0--9的任意数字,$n代表命令的第几个输入参数,比如echo I love android ,I是第一个输入参数,love第二个,android第三个
修改HelloBash.sh的内容为
#!/bin/bash
echo $1
echo $2
echo $3
执行命令./HelloBash.sh I love android
输出 I
love
android
既把命令中的第一个,第二个,第三个参数输出。
1.4.2变量定义
变量没有类型,只有字符串,变量不要单独定义直接赋值,赋值语句不要有空格。使用时用$变量名,为了避免混淆,可用双 引号包含要应用的变量。
#!/bin/bash
A=a
All=All
echo "$A"ll
echo $All
打印
all
All
1.4.3 条件判断
条件判断严格区分判断符号,= 用于判断字符串是否相等,-eq用于判断整数,除此之外,还有一下条件判断符号
-n ----------> 操作数长度不等于0
-z ----------> 操作数长度等于0
-d ----------> 操作数是目录
-f ----------> 操作数是文件
-eq ----------> 两操作数相等
-neq ----------> 两操作书不等
-gt ----------> 大于
-lt ----------> 小于
-ge ----------> 大于等于
-le ----------> 小于等于
= ----------> 字符串判断相等
!= ----------> 字符串判断不等
例:
#!/bin/bash
if [ "$1" = "HelloLinux" ]
then
echo HelloGuys
elif [ "$1" -eq 88 ]
then
echo facaila
elif [ "$1" -gt 88 ]
then
echo tuhao
elif [ "$1" -ge 100 ]
then
echoe hehe
elif [ "$1" -z ]
then
echo Please Input SomeThing...
fi
条件判断语句必须与[,]有空格既[ 条件判断语句 ],if条件判断之后then是要执行的语句,多重判断用elif,结束判断语句用fi。
1.4.4 while [] ... do ... done
类似C语言的do while 语句
例:
#!/bin/bash
echo input some action
ACTION="default"
while [ -n $ACTION ]
do
read ACTION
case $ACTION in
add)
echo "add something"
;;
delete)
echo "delete someting"
;;
exit)
echo "finished"
break
;;
esac
done
read是linux命令,读输入赋值到ACTION,in 判断case分支。每个判断条件用)表示,“;;”结束,break跳出循环,esac表示case语句结束,done 代表 while do 语句结束。
1.4.5 for循环
for语句类似JAVA的foreach,一般和in配合使用,in之后一般是一个集合。
例:
#!/bin?bash
for X in a b c d helloLinux (in 集合,集合用空格隔开)
do (操作)
echo $X
done (for 循环结束)
脚本中要使用Linux命令的输出,作为脚本指令的输入,需要用``(!旁边的符号)将命令包括。单纯只是使用次命令则不用。
例:将当前目录下没有后缀名的文件添加.txt
#!/bin/bash
for f in `ls`
do
if [ -z `echo basename$f|grep "\."` ]
then
mv $f $f.txt
fi
done
basename,dirname 命令后不要空格。basename用来显示一个字符串中的文件名,dirname用来显示路径。
1.4.6 函数
例:
#!/bin/bash
f1(){
OUT="$1""""$2"
return 1
}
f2(){
echo "$1""""$2"
return 3
}
str1=hello
str2=linux
OUT=""
f1 $str1 $str2
echo $OUT
str3=`f2 $str1 $str2`
echo $?
echo $str3
脚本函数和C语言函数在参数传递和返回值方面有很大不同。
脚本函数无需指定函数参数,在函数实体中用$1,$2指定第一个参数和第二个参数
脚本函数返回值不是return关键字所返回内容,是函数中输出内容。要想获得return关键字所返回内容可以使用$?来获取,$?代表上一个函数或指令,所返回的内容。
调用函数并将函数输出赋值给某个变量,需要用``将函数执行包括起来。
1.4.7 常用的内置符号
$@ -----------> 所有参数,例如test a b c ,"a","b","c"展开后为三个字符串
$* -----------> 所有参数,例如test a b c ,"abc"展开后为一个字符串
$? -----------> 上一条指令或函数执行后的返回值。
$# -----------> 所有参数的个数
$$ -----------> 当前的进程号(PID)
UID -----------> 执行该脚本的用户,ROOT用户为0