• 締切済み

パーミッションの変更について

rwxr-wr-w rwxr-wr-- rwxr-wr-t の内容のテキストファイルのパーミッションの変更コマンドをシェルスクリプトで書くにはどうしたらいいのかわかりません。 おしえていただくとありがたいです。 最初の一文字づつを読み込んでchmod ???と数字がでるようにしたいのですが 実行結果 ./a.txt r w x r - w r - w chmod 755と実行結果がでるようにしたいです。if文を沢山つかうのですか?

みんなの回答

  • chikuh
  • ベストアンサー率85% (6/7)
回答No.2

こんにちは。 おそらくrurinkoさんの意図としては、 対象ファイルの頭9文字(パーミッション部分)を読み込んで そのパーミッションに変更するようなchmodの番号を出力する というものではないでしょうか。 おっしゃるようにif文で判別してもいいんですが、 rなら4、wなら2と分岐が複数あるので、 case文でやった方がいいように思います。 簡単にサンプルを作ってみました。 ▼実行イメージ ======================================== ./chmod.sh a.txt r w x r - x r - x chmod 755 ▼a.txt ======================================== rwxr-xr-x ▼chmod.sh ======================================== TARGET_FILE=$1 i=1 j=1 OWNER=0 GROUP=0 OTHER=0 tarCOUNT=0 ROW_COUNT=`cat ${TARGET_FILE} | wc -l` echo $ROW_COUNT PER_CHK(){ TARGET=$1 case ${TARGET} in r) tarCOUNT=4 ;; w) tarCOUNT=2 ;; x) tarCOUNT=1 ;; -) tarCOUNT=0 ;; esac return ${tarCOUNT} } while [ ${i} -le ${ROW_COUNT} ]; do LINE=`cat ${TARGET_FILE} | sed -n ${i}p` while [ ${j} -le 3 ]; do TARGET_CHAR=`echo ${LINE} | cut -c ${j}` echo ${TARGET_CHAR} PER_CHK ${TARGET_CHAR} OWNER=`expr ${OWNER} + ${tarCOUNT}` j=`expr ${j} + 1` done while [ ${j} -le 6 ]; do TARGET_CHAR=`echo ${LINE} | cut -c ${j}` echo ${TARGET_CHAR} PER_CHK ${TARGET_CHAR} GROUP=`expr ${GROUP} + ${tarCOUNT}` j=`expr ${j} + 1` done while [ ${j} -le 9 ]; do TARGET_CHAR=`echo ${LINE} | cut -c ${j}` echo ${TARGET_CHAR} PER_CHK ${TARGET_CHAR} OTHER=`expr ${OTHER} + ${tarCOUNT}` j=`expr ${j} + 1` done echo "chmod ${OWNER}${GROUP}${OTHER}" j=1 OWNER=0 GROUP=0 OTHER=0 tarCOUNT=0 i=`expr ${i} + 1` done

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

申し訳ありませんが、何を何のために何がしたいのか? 質問の意味/目的がわかりません。 老婆心ながら、もう少し第3者が読んで理解できるように整理して 質問しなおされた方がよろしいかと思います。

関連するQ&A