[완료] 리눅스 문자열 치환

artop0420의 이미지

우선 제 소개를 하면 스크립트를 막 시작했고요. 실력으 바닥입니다..ㅋㅋ

구글하고 네이버에도 열심히 찾았는데 답이 없군요. T.T 스크립트 책도 사서 보고 있긴한데 제가 필요한 부분만 빼고 모두 나와있는 느낌입니다.

passwd 파일 내용중에 root 사용자만 /bin/bash를 /bin/csh/ 로 하려고 하거든요.
sed 하고 awk를 가지고 하다가 경로를 잘못잡았는지 모든 테스트파일이 /bin/csh바뀐 증상을 느끼고 지쳐서 써봅니다.T.T
인터넷에 보고 살짝 수정한게 이정도일것 같은데
find /etc -name "passwd" -exec perl -pi -e 's/\/bin\/bash/\/bin\/csh/g' {} \;
이렇게 하면 /bin/bash을 가지고 있는 사용자가 모두 /csh 로 변경이 되서요
제가 원하는건 root사용자만 변경을 원하는건데 변경할 수있는 방법이 있을까요?

bushi의 이미지

정규표현식이나 스크립트 언어에 대한 질문이 아니라 '사용자의 shell을 바꾸고 싶은데?' 라는 질문이라면,
man chsh

OTL

artop0420의 이미지

감사합니다만. chsh의 명령어의 경우 root계정으로 로그인한 후에 명령어를 사용하면 가능하겠지만.
질문의 내용르 좀 더 디테일하게 수정할께요...

현재 Kickstart 리눅스를 설치하고 있습니다. 현재 post 섹션에서 rpm설치를 한다던지 기타 스크립트를 작동시키고 있거든요.
개발된 스크립트는 배쉬 쉘이고요. post 섹션에서 shell을 변경하고자 합니다.
가능할까요?

--- 나는요? ---

리눅스와 솔라리스 그리고 윈도우의 껍데기만 맛보고 있습니다.

bushi의 이미지

ch_sh()
{
    local whatshell=$1
    local username=$2
    local line
    local pe
    [ -z "${whatshell}" ] && return 1
    [ -z "${username}" ] && username=root
    local IFS=:
    while read line;
    do
       pe=(${line})
       [ "${pe[0]}" = "${username}" ] && pe[6]="${whatshell}"
       echo "${pe[0]}:${pe[1]}:${pe[2]}:${pe[3]}:${pe[4]}:${pe[5]}:${pe[6]}"
    done
    return 0
}

$ ch_sh /bin/csh < /etc/passwd > /etc/passwd.new && mv /etc/passwd.new /etc/passwd

OTL
artop0420의 이미지

감사합니다...
굉장히 어렵군요..ㅋㅋ 작동이 잘 됩니다.

--- 나는요? ---

리눅스와 솔라리스 그리고 윈도우의 껍데기만 맛보고 있습니다.

bushi의 이미지

과도하게 일반화 시켜서 그런 것 같습니다.
머릿 속에 생각하신 그대로를 스크립트로 옮기면

ch_sh()
{
    local whatshell=$1
    local username=$2
    local line
    local new_line
    [ -z "${whatshell}" ] && return 1
    [ -z "${username}" ] && username=root
    while read line;
    do
        new_line=${line#${username}:}
        [ "${new_line}" != "${line}" ] && new_line=${line%/bin/bash}${whatshell}
        echo ${new_line}
    done
    return 0
}
정도가 됩니다.
'root: 로 시작하는 문자열의 뒤에서 /bin/bash 를 자르고 대신 /bin/csh 를 붙인다' 의 직설적힌 표현이죠.

OTL

centos의 이미지

아이티 회사에 근무하는 시스템엔지니어 입니다.
멋진 스크립트 네요~
좋은 공부됐습니다~
감사합니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.