shell脚本

来源:互联网 发布:ppt无法编辑数据 编辑:程序博客网 时间:2024/05/18 12:28

1文件安全与权限

1.1  chmod 命令的一般格式为:

chmod [who] operator [permission] filename

举例:

    命 令                                           结 果                              含 义

chmod a-x    myfile                     rw- rw- rw-                  收回所有用户的执行权限

chmod og-w myfile                     rw- r-- r- -                     收回同组用户和其他用户的写权限

chmod g+w  myfile                     rw- rw- r- -                   赋予同组用户写权限

chmod u+x   myfile                     rwx rw- r- -                   赋予文件属主执行权限

chmod go+x myfile                     rwx rwx r- x                 赋予同组用户和其他用户执行权限


ls -l 第一个字符的意思:

d目录。

l符号链接(指向另一个文件)

s套接字文件。

b块设备文件。

c字符设备文件。

p命名管道文件。

-普通文件,或者更准确地说,不属于以上几种类型的文件




1.2 chmod绝对命令模式

chmod [mode] file

例子: chmod 777 myflie


1.3 符号链接 ln

ln [-s] source_path target_path


2 find命令

F i n d命令的一般形式为:
find pathname -options [-print -exec -ok]

2.1 find命令选项

-name按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使 f i n d命令不在当前指定的目录中查找,如果同时使用了- d e p t h选项,那么- p r u n e选项将被f i n d命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件,- n表示文件更改时间距现在n天以内,+ n
表示文件更改时间距现在 n天以前。F i n d命令还有- a t i m e- c t i m e选项,但它们都和- m t i m e选项相似,所以我们在这里只介绍- m t i m e选项。 



例子:
想要在当前目录及子目录中查找所有的‘* . t x t’文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用:
$ find /etc -name "host*" -print


3 后台执行命令

3.1 crontab命令

c r o n t a b的格式:

< >< >< >< >星期< >要运行的命令

例子:

30 21* * * /apps/bin/cleanup.sh

上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h

45 4 1,10,22 * * /apps/bin/backup.sh

上面的例子表示每月11 02 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h


c r o n t a b命令的一般形式为:

Crontab [-u user] -e -l -r

其中:

-u用户名。

-e编辑c r o n t a b文件。

-l列出c r o n t a b文件中的内容。

-r删除c r o n t a b文件。
如果使用自己的名字登录,就不用使用

如果使用自己的名字登录,就不用使用- u选项,因为在执行c r o n t a b命令时,该命令能够知道当前的用户。



3.2 at 命令

a t命令允许用户向c r o n守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能
是指
1 0 m i n以后,也可能是指几天以后。
a t命令的基本形式为:
at [-f script] [-m -l -r] [time] [date]
其中
-f script 是所要提交的脚本或命令。
-l 列出当前所有等待运行的作业。a t q命令具有相同的作用。
-r 清除作业。为了清除某个作业,还要提供相应的作业标识(I D);有些U N I X变体只接受a t r m作为清除命令。
-m 作业完成后给用户发邮件。
time at命令的时间格式非常灵活;可以是HH H . H H M MH H : M MH : M,其中HM分别是小时和分钟。还可以使用a . m .p . m .
date 日期格式可以是月份数或日期数,而且a t命令还能够识别诸如t o d a yt o m o r r o w这样的词。 、


例子:

at  3.00pm tomorrow -f /apps/bin/db.sh

db.sh的脚本将在明天下午3:00 运行;

time:可以是 at 6.45am May 12;


3.3 &命令

命令&  //将命令的东西在后台执行;

 

ps命令查看进程

kill 命令杀死进程



3.4 nohup命令

nohup command &

退出账户时。该进程还不会结束;


4 文件名置换

shell中的特殊字符:
*         匹配文件名中的任何字符串,包括空字符串。
?      匹配文件名中的任何单个字符。
[...]     匹配[ ]中所包含的任何字符。
[!...]    匹配[ ]中非感叹号!之后的字符。
s h e l l遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名。


4.1 使用 *

例子:

ls app*

cd cron.w*

 4.2 使用?

ls ??R*

4.3 使用[...]  [!...]

使用[ . . . ]可以用来匹配方括号[ ]中的任何字符。在这一方法中,还可以使用一个横杠-来连接两个字母或数字,以此来表示一个范围。在下面的例子中,列出了以io开头的文件名:
$ ls [sp]*
pinmux_hi3518.sh  sysctl_hi3518.sh

配以第一个字母是n,第二个字母是a到o,的对象;
$ls n[a-o]*
nano  nc  nc.openbsd  netcat  netstat  nfs-kernel-server  nisdomainname

配以第一个字母是n,第二个字母不是a到o,的对象;
$ ls n[!a-o]*
ntfs-3g           ntfscat      ntfsdecrypt       ntfsls        ntfswipe
ntfs-3g.probe     ntfsck       ntfsdump_logfile  ntfsmftalloc
ntfs-3g.secaudit  ntfscluster  ntfsfix           ntfsmove
ntfs-3g.usermap   ntfscmp      ntfsinfo          ntfstruncate

5 shell 输入、输出

使用标准输入、标准输出及标准错误。
重定向标准输入和标准输出。

5.1 echo

使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
例如:
$echo "jsdlfkj $HOME"
$echo 
特殊字符:
换行:\n
跳格符:\t

$ echo -e "sdfoisdfsk \t dsf \t jkfj \n jsdlkfj \n lkj"
sdfoisdfsk dsf jkfj 
 jsdlkfj 
 lkj
重定向符号>:
追加一个文件结尾,这意味着不会覆盖原有内容>>:
wooya@wooya-pc:~$ echo "sdfsdf  dsf \tdsfj\n dfj\njsdkf\t\tjskf \n"> 1.txt
wooya@wooya-pc:~$ cat 1.txt
sdfsdf  dsf \tdsfj\n dfj\njsdkf\t\tjskf \n
wooya@wooya-pc:~$ echo -e "sdfsdf  dsf \tdsfj\n dfj\njsdkf\t\tjskf \n"> 1.txt
wooya@wooya-pc:~$ cat 1.txt
sdfsdf  dsf dsfj
 dfj
jsdkf jskf 


wooya@wooya-pc:~$ echo -e "sdfsdf  dsf \tdsfj\n dfj\njsdkf\t\tjskf \n"> 1.txt
wooya@wooya-pc:~$ cat 1.txt
sdfsdf  dsf dsfj
 dfj
jsdkf jskf 


wooya@wooya-pc:~$ echo -e "sdfsdf  dsf \tdsfj\n dfj\njsdkf\t\tjskf \n">> 1.txt
wooya@wooya-pc:~$ cat 1.txt
sdfsdf  dsf dsfj
 dfj
jsdkf jskf 


sdfsdf  dsf dsfj
 dfj
jsdkf jskf 




5.2 read

可以使用r e a d语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么r e a d将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。

5.3 cat 

功能:显示文件内容、创建文件、显示控制符;
$ cat myfile1 myfile2 myfile3 > bigfile   //将三个文件内容的输出,重定向到新文件中;

如果希望创建一个新文件,并向其中输入一些内容,只需使用 c a t命令把标准输出重定向到该文件中,这时c a t命令的输入是标准输入 — 键盘,你输入一些文字,输入完毕后按< C T R L - D >结束输入。这真是一个非常简单的文字编辑器! 

5.4 管道

可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 |表示。它的一般形式为:
命令
1 |命令2
其中|是管道符号。

5.5 tee

t e e命令作用可以用字母 T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
它的一般形式为:
tee -a files
其中,-a表示追加到文件末尾。
wooya@wooya-pc:~$ who | tee who.out
wooya    tty7         2017-09-25 16:08
wooya    pts/0        2017-09-25 16:08 (:0.0)
wooya@wooya-pc:~$ cat who.out 
wooya    tty7         2017-09-25 16:08
wooya    pts/0        2017-09-25 16:08 (:0.0)


5.6 标准输入、输出、错误



5.7 文件重定向



表中的command是我们的linux命令;如:ls cat 等;
使用举例:
$ ls >ls.out
可以指定命令的标准输入。在 a w k一章就会遇到这样的情况。下面给出一个这样的例子:
$ sort < name.txt


5.8 exec

e x e c命令可以用来替代当前 s h e l l;换句话说,并没有启动子 s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:
exec command
其中的c o m m a n d通常是一个s h e l l脚本。
我所能够想像得出的描述
e x e c命令最贴切的说法就是:它践踏了你当前的s h e l l



5.9 使用文件描述符(?)


6 命令执行顺序

6.1 &&

使用& &的一般形式为:
命令1 && 命令2
这种命令执行方式相当地直接。 & &左边的命令(命令 1)返回真(即返回0,成功被执行)
后, 
& &右边的命令(命令 2)才能够被执行;换句话说, “如果这个命令执行成功 & &那么执
行这个命令”。

$ mv /apps/bin /apps/dev/bin && rm -r /apps/bin 

6.2 ||

使用| |的一般形式为:
命令1 || 命令2 
| |的作用有一些不同。如果 | |左边的命令(命令 1)未执行成功,那么就执行 | |右边的命令
(命令
2);或者换句话说, “如果这个命令执行失败了 || 那么就执行这个命令” 
在这里不只可以使用系统命令;这里我们首先对 m o n t h _ e n d . t x t文件执行了一个名为 c o m e t
s h e l l脚本,如果该脚本未执行成功,该 s h e l l将结束。
$ comet month_end.txt || exit 

6.3 用()和{ }将命令结合在一起 

如果希望把几个命令合在一起执行, s h e l l提供了两种方法。既可以在当前 s h e l l也可以在
s h e l l中执行一组命令。 
(命令1;命令2;. . . 
{命令1;命令2;. . . } 






原创粉丝点击