質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

Q&A

解決済

1回答

294閲覧

シェルスクリプトにて任意パーミッション・ファイルを指定→実行したい

megumi199810

総合スコア1

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

0グッド

0クリップ

投稿2023/09/12 03:14

編集2023/09/12 04:07

下記の要件を満たすシェルスクリプトを作成したいです。
シェルスクリプト初心者で、調べながら試行錯誤しておりますが自分の力量では解決ができそうにありません。
お力添えいただけますと幸いです。

[要件]
・スクリプト名 chmod.sh
・実行方法 $ ./chmod.sh
・/home/infrauser/infradirXX 直下の任意ファイル(画面入力にて指定)を、任意パーミッション(画面入力にて指定)に変更。
・シェルスクリプト実行時間(yyyy/mm/dd hh:mm:ss形式)、変更前パーミッション、変更後パーミッションを画面に出力。

[実行イメージ]
変更したいファイル名
kadai7_3_1.txt
変更したいパーミッション
644

[実行結果]
[date ] 2020/4/27 21:12:38
[before] -rwxr-xr-x 1 infrauser infragrp 244 4月 27 21:20 kadai6_3_1.txt
[after ] -rw-r--r-- 1 infrauser infragrp 244 4月 27 21:20 kadai6_3_1.txt

#スクリプト内
#!/bin/sh

echo -n '[date ] ';
date '+%Y/%m/%d %H:%M:%S';
echo -n '[before] ';
ls -l 'kadai6_3_1.txt';
chmod 644 kadai6_3_1.txt;
echo -n '[after ] ';
ls -l 'kadai6_3_1.txt';

#実行後
[ infrauser@infrastd1s:/infradir99 ] ./chmod.sh
[date ]2023/0912 12:57:48
[before]ls: cannot access kadai6_3_1.txt: No such file or directory
chmod: cannot access kadai6_3_1.txt’: No such file or directory
[after ]ls: cannot access kadai6_3_1.txt: No such file or directory
[ infrauser@infrastd1s:
/infradir99 ]

#改善すべきところ
任意のファイル・パーミッションを入力後、更新前後の内容を出力しなければならず
そのためにスクリプト内にて、echoや変数を用いるのでしょうがやり方がわかりません…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

chmod.sh

sh

1#!/bin/sh 2 3cd /home/infrauser/infradirXX 4echo -n '[date ] '; 5date '+%Y/%m/%d %H:%M:%S'; 6echo -n '[before] '; 7ls -l 'kadai6_3_1.txt'; 8chmod 644 kadai6_3_1.txt; 9echo -n '[after ] '; 10ls -l 'kadai6_3_1.txt';

カレントディレクトリという想定で提示したのですが、ディレクトリが違いそうですね
cd の行を追記しておきました

追記

一度パーミッションを変更したら、次もその状態から始まるのでbefore/afterは同じ値になります
どうしてもというならbefore処理の前に本のパーミッションにもどしてやってください

SH

1#!/bin/sh 2 3file="kadai6_3_1.txt"; 4dir="/home/infrauser/infradirXX/"; 5 6if [ -d $dir -a -f $dir$file ] ; then 7 cd $dir; 8 echo -n '[date ] '; 9 date '+%Y/%m/%d %H:%M:%S'; 10 echo -n '[before] '; 11 chmod 755 $file; 12 ls -l $file; 13 echo -n '[after ] '; 14 chmod 644 $file; 15 ls -l $file; 16fi

投稿2023/09/12 03:31

編集2023/09/12 07:08
yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

megumi199810

2023/09/12 06:27

こんにちは。何度も回答頂きありがとうございます。 yambejp様のおかげでエラーなく実行ができるようになりました。 しかし、実行後のパーミッションの値がどちらも一緒になってしまいます。 'kadai6_3_1.txt'を空ファイルとして作成した為、シェルスクリプト内のパーミッション変更の際にどちらも変わってしまったので、どちらも同じ値になってしまうと仮説を立てました(そもそもこの仮説自体が間違えていたらすみません…) なので'kadai6_3_1.txt'で再度パーミッションを設定後に再度実行しましたが、実行結果は再設定後のパーミッションでどちらも出力されてしまいました。 質問させていただく前に調べたのですが、的を得る回答が見つかりませんでした…。 原因として考えられることはあるでしょうか。 前提として、シェルスクリプト内は変更しておりません。回答した頂いたソースのままです。
megumi199810

2023/09/13 00:40

おはようございます。yambejp様から回答を頂く前にbefore処理にchmodを投入しており、実行結果は要件と同じにはなっていますが合っているか不安だったので安心いたしました。 大変参考になりました。またの機会がありましたら宜しくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問