• linux shell


    ref:http://www.runoob.com/linux/linux-shell-passing-arguments.html

    Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,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。

  • 相关阅读:
    linux下通过vim编辑文件的方法
    无法访问VMWARE虚拟机中linux的nginx地址
    IDEA中通过Maven插件使用MyBatis Generator
    解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 以及MyBatis批量加载xml映射文件的方式
    MySQL 解决source 命令导入数据库 乱码
    MySQL SELECT表达式的执行顺序是从左往右依次执行
    MySQL 子查询(四)子查询的优化、将子查询重写为连接
    MySQL 子查询(三) 派生表、子查询错误
    MySQL 子查询(二)
    RocketMQ使用
  • 原文地址:https://www.cnblogs.com/studyskill/p/9294843.html
Copyright © 2020-2023  润新知