最新記事

if文でテスト式をいつ使用する必要がありますか?
bash
shell-script

if文でテスト式をいつ使用する必要がありますか?

Bashスクリプトの場合は、ifステートメントでテスト式をいつ使用するかを混乱させます。 たとえば、次のように動作します。 if finger | grep -q alex しかし、以下の場合はそうではありません。 if [ finger | grep -q alex ] ただし、次のことができます。 if [ 3 -gt 5 ] それでは、いつテスト式を使用し、いつ使用しないでください。また、上記のコマンドでテスト式を使用する方法はありますか?

Admin

bashスクリプト - 構文の助けが必要です
bash
shell-script
syntax

bashスクリプト - 構文の助けが必要です

4つの異なるファイルの最後の行を読み、特定の文字列を探しています。その文字列に基づいてソースファイルの名前を変更する必要があります。 4つのファイルはすべてgrep文字列と最終的な宛先名が異なります。 if tail -n1 $f | grep $string -e $string; then cp $f to file.new else tail -n1 $f |grep $sting2 -e $string2; then cp $f to file2.new

Admin

JSONファイルの各キーの前に文字列を追加します。
bash
shell-script
json

JSONファイルの各キーの前に文字列を追加します。

Bashスクリプトで読み取るJSONファイルがあり、各キーの前に固定文字列を追加したいと思います。 json_ファイル: {"key_1": 12, "key_2": 34, "key_3": 56} 各キーに文字列を追加してx_このデータを更新する最もきれいな方法は何ですか? 例えば、 {"x_key_1": 12, "x_key_2": 34, "x_key_3": 56}

Admin

他のファイルのパターンと一致するファイルの複数行にある複数の部分文字列を置き換える方法は?
shell-script
awk
sed
python
perl

他のファイルのパターンと一致するファイルの複数行にある複数の部分文字列を置き換える方法は?

複数のIPアドレスとホスト名を含むファイルと、1行に複数のIPアドレスを持ついくつかのフォルダを含む他のファイルがあります。 IP_ホスト名.txt host1 10.1.1.1 host2 10.2.2.2 host3 10.3.3.3 host100 10.50.50.50 path_ips.txt /path1/foo/bar 10.1.1.1 10.2.2.2 10.3.3.3 /path2/foo/bar 10.3.3.3 10.7.7.7 /path3/foo/bar 10.4.4.4 10.8.8.8 10.29.29.29 10.75.75.75 /path100/foo/bar 10.60.60.60 IPアドレスを変更したいpath_ips.txtホスト名が出るファイルIP_ホスト名.txt各 IP アドレスに一致するファイルです。 希望の出力path_ips.txt /path1/foo/bar host1 host2 host3 /path2/foo/bar host3 host7 /path3/foo/bar host4 host8 host29 host75 /path100/foo/bar host60 私は入れ子になったsedを使ってこれを試しました。読みながらループは次のとおりです。 #!/bin/sh while read -r line do IP=$(echo $line| awk '{print $1}') HN=$(echo $line| awk '{print $2}') while read -r line2 do sed -i "s/$IP/$HN/g" path_ips.txt echo $line2 #to see the progress done < path_ips.txt done < ip_hostname.txt IPアドレスとホスト名のリストがそれほど大きくない場合は、最初はうまく機能しますが、より大きなリストを使用しようとするとうまく機能します。IP_ホスト名.txtファイルを開くと奇妙に動作し、結果が予想と異なります。言うまでもなく完了するのに長い時間がかかります。 これを行うより良い効率的な方法はありますか?

Admin

カウントダウンタイマーの作成方法
bash
shell-script

カウントダウンタイマーの作成方法

20 secカウントダウンタイマーをから降順に表示する必要があります。00 sec 20秒以内にパスワードを入力できない場合は、メッセージで終了します。君の時間は終わった 出力: you have 20 sec to enter password : you have 15 sec to enter password : you have 10 sec to enter password : you have 00 sec to enter password : メッセージを表示する作業コードの一部 read -t 20 -p 'Enter your password : ' status=$? if [ $status -eq 142 ] then echo "your time is over" fi

Admin

列のすべての値を文字列と比較
bash
shell-script
ubuntu

列のすべての値を文字列と比較

次のtxtファイルがあります。 ----------------------------- CPU(%) SWAP Memory(%) ----------------------------- 181.2 0kB 0.4 12.5 0kB 0.4 0.0 0kB 0.4 0.0 0kB 0.4 0.0 0kB 0.4 0.0 0kB 0.4 0.0 0kB 0.4 0.0 0kB 0.4 SWAP列のすべての値が0kBであることを確認したいと思います。誰かを助けてほしい:)

Admin

.desktop ファイルの Exec= 行でプロセス名を確認します。 bashスクリプトのときにExec =実行中にエラーが発生しました。
bash
shell-script
.desktop

.desktop ファイルの Exec= 行でプロセス名を確認します。 bashスクリプトのときにExec =実行中にエラーが発生しました。

私はexec行で生成されたプロセスの名前を取得するためにこのシェルスクリプトを作成しました。 私の問題は、Arduino IDEで試してみるとエラーが発生することです。私はそれを調べて、そのexec行は別のシェルスクリプトです。 これが私の問題かどうかはわかりませんが、ロードしようとしましたが、できないようです。 私のスクリプト #!/bin/bash exe=$(grep '^Exec' "$1" | tail -1 | sed 's/^Exec=//' | sed 's/%[a-zA-Z]*//') type=$(file $exe | grep "Bourne-Again") if [ -z "$type" ]; then echo Debug - its a shell script bash "$exe" & else echo Debug - its not a shell script $exe & fi PID=$(echo $!) process=$(ps --no-header -p $PID -o comm) kill -SIGTERM $PID echo $exe echo $process 間違い bash PycharmProjects/touch_mouser/TouchMouser/get_exe_and_process_name.sh "/usr/share/applications/arduino-arduinoide.desktop" Debug - its a shell script bash: "/home/lewis/builds/arduino/arduino-1.8.12/arduino": No such file or directory PycharmProjects/touch_mouser/TouchMouser/get_exe_and_process_name.sh: line 15: kill: (27840) - No such process "/home/lewis/builds/arduino/arduino-1.8.12/arduino" ==== ただし、この端末を実行すると正常に動作します。 bash "/home/lewis/builds/arduino/arduino-1.8.12/arduino" 誰もが理由を知っているか、それに洞察力を持っていますか?

Admin

システムメッセージ
shell-script
permissions
sudo
error-handling

システムメッセージ

正しく機能し、エラーを出力しないインストールスクリプトがありますが、新しくインストールされたパッケージのいずれかを使用してコマンドを実行すると、キーファイル()にアクセスする権限がないことを示すメッセージが表示されます/home/test/.config/configstore/bower-github.json。 ただし、次のようにパッケージをインストールするとき精密スクリプトと同じコマンドですが、端末(スクリプトの外側)で手動で1つずつ実行すると、すべてが期待どおりに機能し、権限に関する苦情はありません。 権限の問題を引き起こすスクリプトは何ですか? システムメッセージ Linux test 5.3.0-59-generic #53~18.04.1-Ubuntu SMP Thu Jun 4 14:58:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux スクリプトを実行するコマンド bash adapt.sh sudo bash adapt.sh (新しくインストールされた仮想マシンで別々にテストしましたが、結果は同じでした) スクリプト #!/bin/bash LOG=~/adapt/LOG.txt # Print description echo echo "Adapt installation for Ubuntu 18.04 LTS (Bionic Beaver)" echo "### Supported until April 2023 ###" sleep 2 echo echo "The Adapt authoring tool, CLI and dependencies will be installed." sleep 2 echo -n "Would you like to continue? [y/N] " read input echo if [[ $input == "y" || $input == "Y" ]]; then echo "Creating and moving to new Adapt directory ..." sleep 2 mkdir ~/adapt cd ~/adapt touch LOG.txt echo "Updating software package repos ..." sudo apt-get update >> /dev/null 2>&1 echo "Installing Git ..." sudo apt-get -y install git-all >> $LOG 2>&1 $(which curl >> /dev/null 2>&1) if [ $? != 0 ]; then sudo apt-get -y install curl >> $LOG 2>&1 fi echo "Installing Node.js v12.x (LTS) ..." curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - >> $LOG 2>&1 sudo apt-get -y install nodejs >> $LOG 2>&1 echo "Installing Grunt ..." sudo npm install -g grunt-cli >> $LOG 2>&1 echo "Installing the Adapt CLI ..." sudo npm install -g adapt-cli >> $LOG 2>&1 echo "Installing MongoDB and starting mongod service ..." wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - >> $LOG 2>&1 sudo touch /etc/apt/sources.list.d/mongodb-org-4.2.list echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee -a /etc/apt/sources.list.d/mongodb-org-4.2.list >> /dev/null 2>&1 sudo apt-get update >> /dev/null 2>&1 sudo apt-get -y install mongodb-org >> $LOG 2>&1 sudo service mongod start >> $LOG 2>&1 echo "Installing the Adapt authoring tool ..." git clone https://github.com/adaptlearning/adapt_authoring.git >> $LOG 2>&1 cd adapt_authoring sudo npm install --production >> $LOG 2>&1 sudo node install else echo "Exiting..." fi echo "Refer to 'LOG.txt' for more information." echo 間違い test@test:~/adapt$ adapt create course /usr/lib/node_modules/adapt-cli/node_modules/bower/lib/node_modules/configstore/index.js:54 throw err; ^ Error: EACCES: permission denied, open '/home/test/.config/configstore/bower-github.json' You don't have access to this file. at Object.openSync (fs.js:458:3) at Object.readFileSync (fs.js:360:35) at Configstore.get (/usr/lib/node_modules/adapt-cli/node_modules/bower/lib/node_modules/configstore/index.js:35:26) at new Configstore (/usr/lib/node_modules/adapt-cli/node_modules/bower/lib/node_modules/configstore/index.js:28:45) at readCachedConfig (/usr/lib/node_modules/adapt-cli/node_modules/bower/lib/config.js:19:23) at defaultConfig (/usr/lib/node_modules/adapt-cli/node_modules/bower/lib/config.js:11:12) at Object. (/usr/lib/node_modules/adapt-cli/node_modules/bower/lib/index.js:16:32) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) at Module.load (internal/modules/cjs/loader.js:986:32) { errno: -13, syscall: 'open', code: 'EACCES', path: '/home/test/.config/configstore/bower-github.json' }

Admin

echoコマンドで変数を使用する
bash
shell-script
macos

echoコマンドで変数を使用する

私はスクリプトに初めてアクセスし、このコマンドを使用するのが少し難しいです。誰かが助けることができるでしょう。 このコマンドを使用すると、すべてがうまく機能します。 titi=`echo 'scale=6; 10/65535' | bc -l | awk '{printf "%.6f\n", $0}' echo "titi = $titi " わかりました。 titi = 0.000152 完璧 ただし、変数を使用しようとするとエラーが発生します。 toto=10 titi=`echo 'scale=6; $toto/65535' | bc -l | awk '{printf "%.6f\n", $0}'` echo "titi = $titi " 結果 (standard_in) 1: illegal character: $ 明らかに、コマンドに変数を書く方法は間違っていますが、それを書く方法がわかりません。 誰でも私を助けることができますか?

Admin

私の.bashrcに
bash
shell-script
scripting
environment-variables

私の.bashrcに "export BASH_ENV=~/.bashrc"を入れるのは良い考えですか?

~/.bashrc私のBashがインタラクティブに使用するのに役立つだけでなく、スクリプト(エイリアス、関数、変数など)にも役立つ幅広いカスタマイズ機能があるとします。私はすべてのスクリプトでこの機能を使用できることを願っているのでBASH_ENV(~/.bashrcこれを行うことができるようです) 私の質問はこれに問題がありますか? 1つの問題は、私が使用しているサードパーティのシェルスクリプトが私と同じように機能できることです~/.bashrc。しかし、とにかく使用する前に検討するので、管理可能な問題だと思います(またはGithub Starsの難解な統計のようなものを盲目的に信頼して安全だと思います)。BASH_ENV誤動作する可能性のあるスクリプトを削除するには、時々身体を下げてください。 もう一つの問題はスピードですが、正直なところ、私は~/.bashrcそれほど重くないので、スピードが必要な場合はシェルスクリプトを使用しません。 もう一つの問題はセキュリティです。しかし、私がいくつかのsetuidまたは特権的地位を持って悪意のあるスクリプトを実行している場合、私はすでにYOLOライフスタイルを生きています~/.bashrc。 もう一つの質問は、純粋主義者の観点から見ると、私の~/.bashrcファイルを2つのファイル、つまり対話型使用のためのファイルとスクリプト用のファイルに分割し、対話型ファイルです。しかし、その漠然とした純粋さを超えて、あまりにも少ない努力にあまりにも多くの努力を注ぐように聞こえます。 もう一つの問題は移植性ですが、私はほとんど直接スクリプトを書いています。後で他の人と共有したい場合は、一般化することはそれほど難しくありません。最悪の場合は、~/.bashrc使用している機能が何でも自動的にインライン化されるようにスクリプトを作成できます。 NPの問題ではないようです。 私の非標準機能の利点を享受できるスクリプトは、~/.bashrcそのようなスクリプトを最初に別の言語で書く必要があることを示唆しているので、私のアプローチに欠陥があると主張するかもしれません。 一方、Unix / Linuxの哲学は単純な標準セットではなく、環境をニーズに合わせて調整するツールセットなので、できない理由はありません。

Admin