标签: scripting

创建用户 passwd 的命令行脚本

我对 Linux 和 PHP 很陌生,所以如果这是一个愚蠢的问题,请原谅我。

我需要创建一个 PHP 命令行脚本,将用户添加到系统中,以供 ftp 服务器使用。我现在已经设置好了,它可以很好地创建帐户。我面临的问题是,即使我在创建帐户时传递了密码,即。-p $password,我仍然需要在该帐户上运行“passwd”命令并手动设置密码,然后 proftpd 才会让该帐户登录。

对于我的一生,我无法弄清楚如何从 php.ini 中运行 passwd 命令。显然我可以运行它,但我不知道如何在提示时以编程方式输入密码。

只是为了了解更多信息,这是我在创建帐户时运行的命令。$username 和 $password 被传递到函数中。

shell_exec("useradd ".$username." -g ftpusers -m -p ".$password." -d
/home/ftp/".$username."/ -s /bin/false);
Run Code Online (Sandbox Code Playgroud)

现在我想添加一些内容:

shell_exec("passwd ".$username);
echo $password;
echo $password;
Run Code Online (Sandbox Code Playgroud)

仅供记录,最后一个示例仅用于说明。

任何帮助表示赞赏。

php passwords scripting ubuntu

1
推荐指数
1
解决办法
2025
查看次数

如何在Windows中的bat脚本中将输出直接输出到txt文件中

在linux中,假设我想启动tomcat,并且想将所有控制台日志定向到一个文本文件中,我可以编写一个bash脚本:

./startup.sh > 输出.txt

但在 Windows 中,我们可以使用 .bat 脚本做类似的事情吗?

我怎样才能写这个bat脚本???

(我知道正确的方法应该要求应用程序执行日志,但应用程序不是我编写的,他们使用system.out.print打印日志,所有日志都在控制台中,但我想存档日志,万一发生什么事情我可以回溯)

windows scripting batch-file

1
推荐指数
1
解决办法
2万
查看次数

如何在脚本中执行 grep?

当我执行以下操作时,我得到结果:

bash$ cat launched | egrep MyTest
MyTest
Run Code Online (Sandbox Code Playgroud)

但使用以下脚本:

#!/bin/sh
result= `cat launched | grep MyTest`
echo $result
Run Code Online (Sandbox Code Playgroud)

启动脚本时我得到:

bash$ ./test.sh
./test.sh: MyTest: not found
Run Code Online (Sandbox Code Playgroud)

我对脚本拥有完全访问权限,并且脚本在与文件启动的同一目录中启动。我如何修复脚本,使其返回与上面相同的结果?

linux bash shell scripting

1
推荐指数
1
解决办法
2万
查看次数

算术表达式:期望 EOF:“008 +1”

我的脚本./make_shift_ln_o_dummy.sh:

for i in  `seq -w 0 272`
do
y=0
x=1
echo $i
y=$(($i +$x))
echo $y
done
Run Code Online (Sandbox Code Playgroud)

我的输出带有错误消息:算术表达式:期望 EOF:“008 +1”

000
1
001
2
002
3
003
4
004
5
005
6
006
7
007
8
008
./make_shift_ln_o_dummy.sh: 25: arithmetic expression: expecting EOF: "008 +1"
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我做错了什么?我该如何将其更改为272的输出?

linux bash shell scripting

1
推荐指数
1
解决办法
2万
查看次数

迭代 lua 表不起作用

我有以下 lua 表:

t = {姓名=“桑迪”,年龄=“22”,专业=“计算机科学”}

我想迭代它,下面的两种方法都不起作用

方法一

function printAssociateTable(t) print("循环之前") for i,v in ipairs(t) do print(v) end end

方法2

function printAssociateTable2(t) print("循环之前") for k in ipairs(t) do print("循环之前") print(k.. " is " ..tk) end end

当我调用任一方法时,它们都会打印“循环之前”。所以问题是程序没有进入循环!

我尝试手动访问该表,如果我这样做:

return t.name => 给出 sandy

return t[name] => 给出nil

return t["name"] => 给出 sandy !

我如何迭代我的表?请注意,这两种方法都适用于像这样的简单数组

a={"a","b","c","d"}

但我希望它适用于我的关联数组

scripting lua luagl

1
推荐指数
1
解决办法
2209
查看次数

当脚本中没有下一行字符时,为什么我的输出会转到下一行

我正在学习和编写一个非常基本的 Perl 脚本,如下所示:-

print "Please enter your name dear: ";
$name = <STDIN>;
print "${name} you are learning Perl";
Run Code Online (Sandbox Code Playgroud)

由于某种原因,输出显示为:-

Please enter your name dear: saas
saas
 you are learning Perl
Run Code Online (Sandbox Code Playgroud)

当任何地方都没有提到 \n 时,为什么输入名称后的文本会转到下一行字符?

scripting perl

1
推荐指数
1
解决办法
260
查看次数

如何杀死Unix中经常休眠的进程?

我有一个 Unix shell 脚本,如下所示:

(
  # Trap the HUP signal so it doesn't kill me
  trap "" HUP
  # Redirect stderr to /dev/null
  exec 2>/dev/null
  # Redirect stdin from /dev/null
  exec 0</dev/null
  # Redirect stdout to logfile
  exec 1>${LOG}

  while [ 1 ]
  do
    ps -ewwo pcpu,pid,ppid,comm,time,etime,thcount,scount,fuser,args | grep -v "migration" | grep -v "watchdog" | grep -v "ksoftirqd"
    sleep 600
  done
) &
Run Code Online (Sandbox Code Playgroud)

我希望它在我运行的一些测试期间在后台运行以捕获进程信息。它运行带有一些选项的“ps”,然后休眠 10 分钟,我希望它无限期地运行(因为我的测试长度不同)。

我的问题是我没有办法阻止这个 - 执行“ps -ef”只显示“sleep 600”命令,而且我没有办法打破循环。有没有办法杀死这个脚本,或者更好地编写它,以便不包含永无止境的循环?我唯一的想法是编写脚本以在一定时间限制(即几组 10 分钟)后结束执行,但我不希望在每次测试之前都编辑脚本。

unix shell scripting

1
推荐指数
1
解决办法
6602
查看次数

将远程 ssh 命令的输出收集到变量中

如何在 bash 脚本中捕获远程命令的输出。例如

ssh $USERNAME@$SUT<<EOD
COUNT=$(ls -la | wc -l)
EOD
Run Code Online (Sandbox Code Playgroud)

将此计划用于具有多个此类实例的较大脚本,我需要在其中存储和使用远程命令输出。

bash shell scripting

1
推荐指数
1
解决办法
5584
查看次数

使用 Fish Shell 脚本更改循环中列表的值

我正在尝试迭代鱼壳列表并更改元素的值,将这些新值保存到该列表中。

原始列表的填充方式如下:

set -l dockApplications (ls $HOME/.config/plank/dock1/launchers/)
Run Code Online (Sandbox Code Playgroud)

这可以工作并生成一个如下所示的列表:

emacsclient.dockitem firefox.dockitem monodevelop.dockitem Thunar.dockitem
Run Code Online (Sandbox Code Playgroud)

现在我想迭代它并将字符串“dockitem”更改为“desktop”。

我尝试过 for 循环,但似乎没有正确使用它:

for application in $dockApplications
     echo $application
     set application (string replace 'dockitem' 'desktop' $application )
     echo $application
     echo "==========="
end
Run Code Online (Sandbox Code Playgroud)

这回显了字符串操作之前和之后的情况,我生成了正确的字符串。但是当我echo $dockApplications在 for 循环之后做类似的事情时。我得到带有“docitem”扩展名的字符串列表。

我也尝试过$dockApplications以不同的方式设置变量,例如:

set -l dockApplications (string replace 'dockitem' 'desktop' (ls $HOME/.config/plank/$dockdir/launchers/))
Run Code Online (Sandbox Code Playgroud)

但这似乎返回了带有“docitem”扩展名的相同字符串列表。

我认为我从根本上误解了变量的分配方式或变量的范围是如何处理的。

我从来没有完全专注于 shell 脚本编写。我可以阅读它并了解正在发生的事情,但在实现它时,当我尝试以不同语言的方式实现某些目标时,我遇到了一些障碍。但我意识到 shell 脚本的强大之处,并且希望能做得更好。因此,非常感谢任何有关如何以鱼壳惯用方式执行此操作的指示。

shell scripting fish

1
推荐指数
1
解决办法
1122
查看次数

删除除包含给定字符串的第一行之外的所有内容

我有一个duration.log带有输出的日志文件,例如

2021-04-15 20:25:45.639181: --- DURATION: 0:00:02.928309 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:48.756914: --- DURATION: 0:00:03.000727 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:51.948027: --- DURATION: 0:00:03.068122 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:55.075158: --- DURATION: 0:00:02.987064 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:58.274715: --- DURATION: 0:00:03.063948 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:26:01.753367: --- DURATION: 0:00:03.273167 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 …
Run Code Online (Sandbox Code Playgroud)

unix bash shell scripting awk

1
推荐指数
1
解决办法
44
查看次数

标签 统计

scripting ×10

shell ×6

bash ×4

linux ×2

unix ×2

awk ×1

batch-file ×1

fish ×1

lua ×1

luagl ×1

passwords ×1

perl ×1

php ×1

ubuntu ×1

windows ×1