Terminal Friday: Bash [Mở rộng khóa]

Đầu tiên mình xin lỗi, do thứ XNUMX tuần trước mình không viết được bài nên hôm nay mình sẽ bổ sung thêm để bù lại ngày đã mất. 🙂

Mở rộng Brace

Trong tiếng Tây Ban Nha, mở rộng khóa có vẻ là một chức năng được lấy cảm hứng từ c-shell, điều này tạo ra sự kết hợp giữa các ký tự được nhập bên trong dấu ngoặc nhọn, thứ tự nó sử dụng là từ trái sang phải. Nó không phức tạp chút nào, nhưng nó là một tùy chọn sẽ rất hữu ích trong các chuyến tham quan GNU / Linux của chúng tôi.

Ví dụ:

$ echo a {1,2,3} a1 a2 a3

Khi dùng với dấu phẩy (,) tạo kết hợp giữa giá trị a và các giá trị bên trong dấu ngoặc nhọn. Nếu không có giá trị nào bên ngoài các khóa, nó sẽ chỉ hiển thị một lần mỗi giá trị mà khóa đó chứa.

$ echo {a, b, c} abc

Việc sử dụng nó không phức tạp chút nào, có những ví dụ khác phổ biến hơn như tạo nhiều thư mục trong một thư mục

$ mkdir ~ / Công việc / {một, hai, ba, bốn, năm}

Điều này tạo ra năm thư mục trong thư mục việc làm, giống như nhập một lệnh cùng một lúc. Tạo 5 thư mục.

Có mở rộng hai điểm .. điều này tạo ra một chuỗi số hoặc ký tự đi từ giá trị ban đầu đến giá trị cuối cùng, không sử dụng các số có chữ cái.

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Incorrect {a..5} # Tôi nghĩ rằng tôi sẽ không bao giờ hiểu được đã sử dụng màu xanh này trong thư

Chúng ta có thể tiết kiệm thời gian bằng cách tạo một chu trình cho

# Thay vì viết $ for ((i = 1; i <= 5; i ++)); làm echo "Số của tôi $ i"; done Số của tôi 1 Số của tôi 2 Số của tôi 3 Số của tôi 4 Số của tôi 5 # Chúng tôi lưu mã bằng cách sử dụng mở rộng dấu ngoặc nhọn. $ cho tôi trong {1..5}; do echo "Số của tôi $ i; done Số của tôi 1 Số của tôi 2 Số của tôi 3 Số của tôi 4 Số của tôi 5 # Tất nhiên nó hợp lệ để sử dụng mặc dù đầu ra khác. $ echo" Số của tôi "{1..5} Số của tôi 1 Số của tôi 2 Số của tôi 3 Số của tôi 4 Số của tôi 5

Tôi nghĩ khái niệm này đã rõ ràng, haha ​​bây giờ tôi sẽ chỉ nhận xét rằng nó có thể kết hợp và lồng vào nhau. Ý tôi là gì?
Với khả năng kết hợp, chúng ta có thể nối một hoặc nhiều khóa

$ echo {a..c} {1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

Với việc lồng vào nhau như nhiều người sẽ tưởng tượng, bạn có thể sử dụng các khóa mở rộng trong các khóa mở rộng

$ echo {a, c {1..3}, d} a c1 c2 c3 d

Và cuối cùng từ Bash KHÔNG có thể tăng giá trị.

$ echo {0..20..2} 0 2 4 6 8 10 12 14 16 18 20

Đây là tất cả cho ngày hôm nay, vì vậy cảm ơn mọi người đã đọc tôi 🙂

thêm

Cách tạo thùng cục bộ

Khi tôi nói một bin local Ý tôi là một thư mục trong đó chúng ta có các tập lệnh của riêng mình và có thể thực thi chúng như một lệnh đơn giản ...

Để đạt được điều này tương đối dễ dàng, điều đầu tiên cần phải làm là tạo một thư mục nơi chúng ta sẽ lưu các script.

mkdir ~ / .bin # Trong ví dụ này, nó sẽ bị ẩn

Bây giờ chúng ta có thư mục để lưu các tập lệnh nhưng nó sẽ không hoạt động cho đến khi chúng ta thêm đường dẫn của .bin mới vào $ PATH
Đối với điều này, tệp đã được chỉnh sửa bash_profile, và dòng được thêm vào.

xuất PATH = $ PATH: ~ / .bin

Và điều đó là đủ để tạo một thùng rác cục bộ, tất nhiên nó sẽ yêu cầu quyền root nếu cần đối với ví dụ chúng tôi viết một kịch bản nhanh.

#! / bin / bash echo "Xin chào $ 1, bạn có khỏe không?"

Lưu nó với tên của xin chào
Tập lệnh được cấp quyền thực thi và nó sẽ chỉ đủ để gọi nó từ thiết bị đầu cuối

$ hello wada #This sẽ hiển thị thông báo Xin chào wada, bạn có khỏe không?

Vì vậy, với thủ thuật nhanh này, bạn có thể chạy các tập lệnh của mình nhanh hơn

Đó là tất cả những gì cho ngày hôm nay những người khỏe mạnh 🙂
Tái bút xin lỗi vì những sai sót nếu có, mắt tôi đã nhắm lại rồi hahaha 😀


26 bình luận, để lại của bạn

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   thợ săn dijo

    Tôi đã ở trong vấn đề bash trong một thời gian dài và tôi đã không hiểu các mở rộng dấu ngoặc nhọn này, cảm ơn.

    Về thủ thuật đường dẫn, Fedora theo mặc định thực hiện một cái gì đó như thế này nhưng trong "~ / .local / bin", hãy xem một đoạn mã từ bash_profile mà tôi đã đưa cho Jessie.

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / thùng
    xuất PATH

    1.    Ricardo dijo

      Tôi có một số lo ngại:
      1. Làm thế nào để tôi yêu cầu anh ta cho tôi hai khoảng thời gian với sự mở rộng của điểm; độ tuổi {1..24,55..90} và tôi mở rộng độ tuổi từ 1 đến 24 và tiếp tục với 55 đến chín mươi. như tôi đã làm nó không hoạt động. Tại sao?

      2. Nếu tôi muốn giá trị đầu tiên là null và tiếp tục đánh số:
      quên đi: http://manga.favorito / hình ảnh http://manga.favorito/imagen1
      Tôi đã thử cách sau nhưng wget không nhận được: http://manga.favorito/imagen{, 1..42} Theo tôi, tôi sẽ phải bỏ tên đầu tiên mà không có số và tiếp tục với số từ 1 đến 42 nhưng không phải như vậy. Tại sao?

    2.    Wada dijo

      Bạn nói đúng một số bản phân phối có hoặc có .bin nhưng đó là để mọi người hiểu và thấy rằng có thể làm điều đó trong bất kỳ bản phân phối nào: D, Cảm ơn vì đã ghé qua.

  2.   bản demo dijo

    Rất tốt, rất tốt cho những đóng góp kiến ​​thức này cho thế giới linux và bảo mật của nó, một số thứ sáu, tôi hy vọng tôi có thể đọc cách định dạng một ổ đĩa trong một thiết bị đầu cuối và ghi hình ảnh iso DVD / CD của bất kỳ hệ thống miễn phí nào trong một thiết bị đầu cuối.

    1.    Wada dijo

      Cảm ơn những lời của bạn anh trai 😀 Tôi hứa rằng thứ sáu tuần sau tôi sẽ làm bài đăng đó. Và tôi phải nói về việc tùy chỉnh Vim hahaha nhưng tôi không muốn họ nghĩ rằng nó sẽ chỉ bao gồm Vim.

  3.   edoardo_or dijo

    Bài viết về thiết bị đầu cuối xuất sắc, bài viết hay nhất mà tôi đã đọc trong một thời gian dài, kể cả một số blog xuất bản các bài hướng dẫn kiểu này. Cảm ơn rất nhiều!!

    1.    Wada dijo

      Cảm ơn bạn rất nhiều 😀 Tôi sẽ cố gắng để theo kịp.

  4.   tuyển lý dijo

    Mẹo tuyệt vời của thùng cục bộ!
    Chúc mừng!

    1.    Wada dijo

      Tuyệt vời, rất hữu ích cho bạn, cảm ơn bạn rất nhiều vì đã vượt qua người anh em 😀

  5.   giskard dijo

    Rất tốt! Không có ý kiến ​​về điều này. Cảm ơn 🙂

    1.    Wada dijo

      Chào mừng anh trai, cảm ơn bạn đã dành thời gian để đọc nó 😀

  6.   Ricardo dijo

    Tôi có một số lo ngại:
    1. Làm thế nào để tôi yêu cầu anh ta cho tôi hai khoảng thời gian với sự mở rộng của điểm; độ tuổi {1..24,55..90} và tôi mở rộng độ tuổi từ 1 đến 24 và tiếp tục với 55 đến chín mươi. như tôi đã làm nó không hoạt động. Tại sao?

    2. Nếu tôi muốn giá trị đầu tiên là null và tiếp tục đánh số:
    quên đi: http://manga.favorito/imagen http://manga.favorito/imagen1

    Tôi đã thử cách sau nhưng wget không nhận được: http://manga.favorito/imagen{, 1..42} Theo tôi, tôi sẽ phải bỏ tên đầu tiên mà không có số và tiếp tục với số từ 1 đến 42 nhưng không phải như vậy. Tại sao?
    * Xin lỗi nhưng tôi đặt bài viết đầu tiên như một câu trả lời và nó đã sai ở một số phần

    1.    Wada dijo

      1.- Logic của bạn là sai, bạn phải lồng nó vào hahaha hãy thử với $ echo {{1..24},{55..90}}

      2.- Giống như phần trước ... $ echo "URL"{,{1..42}}

      Đừng lo lắng, anh trai, chúng tôi ở đây để giúp chúng tôi 🙂

  7.   jvk85321 dijo

    Để thay thế for bằng echo, nó sẽ như thế này

    echo "Số của tôi" {1..5} $ '\ n' | sed -e: a -e '$! n; s / \ n / \ n /; ta' | sed -e: a -e '$! n; s / 5 \ n / 5 /; ta'

    nhưng tôi thích printf hơn

    printf "Tôi, tôi% d \ n" {1..5}

    và sử dụng cùng một khái niệm về mở rộng khóa

    atte
    jvk85321

    1.    jvk85321 dijo

      Làm thế nào để bạn đặt các hộp đầu cuối ????

      atte
      jvk85321

  8.   jvk85321 dijo

    Kiểm tra xem thẻ mã có hoạt động không
    Jeje

    Để thay thế for bằng echo, nó sẽ như thế này

    echo “Mi numero “{1..5}$’\n’ | sed -e :a -e ‘$!N;s/\n /\n/;ta’ | sed -e :a -e ‘$!N;s/5\n/5/;ta’

    pero prefiero printf

    printf “Mi numero %d\n” {1..5}

    và sử dụng cùng một khái niệm về mở rộng khóa

    atte
    jvk85321

    1.    jvk85321 dijo

      Tôi còn lại với một số lỗi nhưng nó đã hoạt động

      Tôi còn sống maluco

      Xin lôi vi đa lam phiên

      atte
      jvk85321

      1.    Wada dijo

        Hahaha bạn đã tự trả lời nhưng nếu nó nằm giữa các nhãn không có khoảng trắng ...

        Và khi thay thế cho thì không cần thiết phải làm nhiều như vậy đâu hahahaha đủ với:
        echo -e "Mi numero "{1..5}"\n\b"

        Thành thật mà nói printf là cách tốt nhất để in văn bản trong script, nó dễ di động hơn nhưng theo truyền thống sử dụng tiếng vang.

      2.    Wada dijo

        Tôi lấy không gian! hahahahaha

        chúng ta hãy xem ngay bây giờ 😀

      3.    Wada dijo

        Quái nó là "nhỏ hơn" mã "lớn hơn" "nhỏ hơn" / mã "lớn hơn" hahahaha

      4.    jvk85321 dijo

        Vấn đề là tiếng vang -e không chuẩn, vì vậy nó không hoạt động trên tất cả các hệ thống.

        Cũng xuất hiện lộn xộn
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5

        jvk@jvktos:~$
        Và với cái này
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Tôi nghĩ thứ hai trình bày kết quả tốt hơn, hahaha

        atte
        jvk85321

      5.    jvk85321 dijo

        Những cái nhãn này thật là ngớ ngẩn, hehehe, hãy xem chúng có hiệu quả không
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Và với cái này
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Tôi nghĩ thứ hai trình bày kết quả tốt hơn, hahaha
        atte
        jvk85321

      6.    jvk85321 dijo

        Dù sao, hãy để khoảng cách giữa các dòng, đó là lý do tại sao tôi ghét html, hahahaha

  9.   Joaquin dijo

    Thông minh! Tôi vỗ chân bạn haha

    Tôi không biết rằng các khóa có thể được lồng vào nhau, vì tôi cũng chưa bao giờ cố gắng sử dụng chúng, nó thực sự tiết kiệm rất nhiều mã và nó cũng dễ đọc hơn theo cách này. Cảm ơn bạn!

    1.    Wada dijo

      Cảm ơn bạn đã thông qua người anh em, tôi rất vui vì nó rất hữu ích.

      1.    Joaquin dijo

        Bạn được chào đón, đó là những gì chúng tôi ở đây để chia sẻ và đóng góp ý kiến. Tôi không biết cách lập trình, tôi vừa làm một vài việc trong Bash và tôi đã xuất bản một số đoạn mã mà tôi đã làm trong hai bài đăng. Tôi nghĩ rằng biết điều này có thể làm cho mã dễ hiểu hơn.