ref:http://www.runoob.com/linux/linux-shell-passing-arguments.html
Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
实例
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
1> /dev/null 表示将命令的标准输出重定向到 /dev/null
2>/dev/null 表示将命令的错误输出重定向到 /dev/null
-------------------------------------------------------------------------
shell-exec
exec 3<>hello.txt # 以读写方式绑定到文件描述符"3"
echo "hello exec" >&3 # 写入"hello exec",如果之前有内容,这里将会从文件开头进行覆盖
echo "hello world" >>&3 # 写入"hello world“,新的一行!
exec 3>&- # 关闭写,禁止写,然而,实际上它也不能读了~
# 如果是exec 3<&-,关闭读,同时它也不能写了~
------------------------------------------------------------------------------------------------
#!/bin/bash
echo -n "Enter your name:" //参数-n的作用是不换行,echo默认是换行
read name //从键盘输入
ref:https://blog.csdn.net/fly542/article/details/7108037
- 今天看到有个目录的权限是rwxrwxrwt 很惊讶这个t是什么,这个t代表是所谓的sticky bit。
- sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件.
要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。
在一个目录上设了sticky位后,(如/home,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件(root除外),这就对所有用户能写的目录下的用户文件启到了保护的作用。
可以通过chmod o+t tmp 来设置tmp目录的sticky bit,而且/tmp目录默认是设置了这个位的。
linux shell中参数执行问题
下面有一段程序a.sh,其内容为
#!/bin/bash $1;执行pwd命令 "$1"//执行pwd命令,与“"无关 echo $1//打印$1内容 echo "$1"//打印$1内容
执行命令:./a "pwd",注意在java exec时参数是带引号,而不是./a pwd,这相当于两天命令。若需要参数执行命令,则必须作为命令放在首位置。
linux更改文件owner,group
ref:https://www.cnblogs.com/zhihaowu/p/8810686.html
1.linux下修改文件用户组
chgrp: change group的简写,修改文件所属的用户组。
chgrp users test.log
修改后查看 ls -l
-rwxrwx--- 1 work users 0 Jun 8 15:46 test.log
如果要修改该目录下所有文件和目录,使用-R参数。
chgrp -R users test
要被改变的group名,必须在 /etc/group 文件中。 /etc/group文件记录系统中所有的组名称。
2.linux下修改文件所有者
chown :change owner的简写, 修改文件的所有者。
chown [-R] 账号名称 文件或目录
-R 递归,将子目录下文件全部修改。
将文件所有者修改bin
chown bin test.log
修改的用户必须在/etc/passwd文件中 /etc/passwd记录用户信息。
chown还可以修改组名称
chown root:root test.log
将所有者和组名称都修改为root。