คำถามติดแท็ก sh

sh เป็นเชลล์ Unix มาตรฐานตั้งแต่เวอร์ชัน 7 Unix POSIX มีลักษณะการทำงานของเชลล์ที่เป็นมาตรฐานตาม Bourne Shell และสคริปต์เชลล์แบบพกพาควรเป็นไปตามไวยากรณ์ที่เป็นมาตรฐาน ใช้แท็กนี้สำหรับคำถามที่ใช้กับเชลล์สไตล์ Bourne / POSIX สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

26
วิธีการตรวจสอบว่าสตริงมีสตริงย่อยใน Bash
ฉันมีสตริงใน Bash: string="My string" ฉันจะทดสอบว่ามันมีสตริงอื่นได้อย่างไร? if [ $string ?? 'foo' ]; then echo "It's there!" fi ??ตัวดำเนินการที่ไม่รู้จักของฉันอยู่ที่ไหน ฉันใช้เสียงสะท้อนgrepหรือไม่? if echo "$string" | grep 'foo'; then echo "It's there!" fi ที่ดูเหมือนเงอะงะเล็กน้อย
2566 string  bash  shell  substring  sh 

12
ความแตกต่างระหว่าง sh และ bash
เมื่อมีการเขียนโปรแกรมเปลือกเรามักจะใช้และ/bin/sh /bin/bashฉันมักจะใช้bashแต่ฉันไม่รู้ว่าอะไรคือความแตกต่างระหว่างพวกเขา ความแตกต่างหลักระหว่างbashและshคืออะไร เราทำอะไรจะต้องตระหนักว่าเมื่อการเขียนโปรแกรมในbashและsh?
1303 bash  shell  unix  sh 

21
ฉันจะประกาศและใช้ตัวแปรบูลีนในเชลล์สคริปต์ได้อย่างไร
ฉันพยายามประกาศตัวแปรบูลีนในเชลล์สคริปต์โดยใช้ไวยากรณ์ต่อไปนี้: variable=$false variable=$true ถูกต้องหรือไม่ นอกจากนี้หากฉันต้องการอัปเดตตัวแปรนั้นฉันจะใช้ไวยากรณ์เดียวกันหรือไม่ ในที่สุดเป็นไวยากรณ์ต่อไปนี้สำหรับการใช้ตัวแปรบูลีนเป็นนิพจน์ที่ถูกต้อง? if [ $variable ] if [ !$variable ]
978 bash  shell  scripting  boolean  sh 

13
วิธีการสะท้อนคำสั่งของเชลล์ในขณะที่ดำเนินการ
ในเชลล์สคริปต์ฉันจะสะท้อนคำสั่งเชลล์ทั้งหมดที่เรียกและขยายชื่อตัวแปรได้อย่างไร? ตัวอย่างเช่นกำหนดบรรทัดต่อไปนี้: ls $DIRNAME ฉันต้องการให้สคริปต์รันคำสั่งและแสดงต่อไปนี้ ls /full/path/to/some/dir วัตถุประสงค์คือเพื่อบันทึกล็อกของคำสั่งเชลล์ทั้งหมดที่เรียกว่าและอาร์กิวเมนต์ อาจมีวิธีที่ดีกว่าในการสร้างบันทึกดังกล่าวหรือไม่?
911 bash  shell  sh  posix  trace 

7
ชุด -e หมายถึงอะไรในสคริปต์ทุบตี?
ฉันกำลังศึกษาเนื้อหาของไฟล์preinstนี้ที่สคริปต์ดำเนินการก่อนแพ็กเกจนั้นจะถูกแตกจากไฟล์ Debian archive (.deb) สคริปต์มีรหัสต่อไปนี้: #!/bin/bash set -e # Automatically added by dh_installinit if [ "$1" = install ]; then if [ -d /usr/share/MyApplicationName ]; then echo "MyApplicationName is just installed" return 1 fi rm -Rf $HOME/.config/nautilus-actions/nautilus-actions.conf rm -Rf $HOME/.local/share/file-manager/actions/* fi # End automatically added section ข้อความค้นหาแรกของฉันเกี่ยวกับบรรทัด: set -e ฉันคิดว่าสคริปต์ส่วนที่เหลือนั้นค่อนข้างเรียบง่าย: …
713 linux  bash  shell  sh 

8
วิธีการดำเนินการ OR แบบลอจิคัลในเชลล์สคริปต์
ฉันพยายามตรวจสอบสภาพง่าย ๆ แต่ดูเหมือนจะไม่ทำงาน ถ้า$#เท่ากับ0หรือมากกว่า1นั้นจงทักทาย ฉันได้ลองใช้ไวยากรณ์ต่อไปนี้โดยไม่ประสบความสำเร็จ: if [ "$#" == 0 -o "$#" > 1 ] ; then echo "hello" fi if [ "$#" == 0 ] || [ "$#" > 1 ] ; then echo "hello" fi
571 bash  unix  if-statement  sh 

9
'echo' โดยไม่ขึ้นบรรทัดใหม่ในเชลล์สคริปต์
ฉันมีปัญหากับechoในสคริปต์ของฉัน: echo -n "Some string..." พิมพ์ -n Some string... และย้ายไปยังบรรทัดถัดไป ในคอนโซลมันทำงานได้อย่างถูกต้องโดยไม่ต้องขึ้นบรรทัดใหม่: Some string...
540 shell  command-line  sh 

5
คำสั่งไม่พบข้อผิดพลาดในการกำหนดตัวแปร Bash
ฉันมีสคริปต์นี้ชื่อ test.sh: #!/bin/bash STR = "Hello World" echo $STR เมื่อฉันวิ่ง sh test.shฉันจะได้รับสิ่งนี้: test.sh: line 2: STR: command not found ผมทำอะไรผิดหรือเปล่า? ฉันมองไปที่พื้นฐานมาก / ผู้เริ่มต้นบทเรียนการเขียนสคริปต์ทุบตีออนไลน์และนี่คือวิธีที่พวกเขาพูดเพื่อประกาศตัวแปร ... ดังนั้นฉันไม่แน่ใจว่าสิ่งที่ฉันทำผิด ฉันใช้ Ubuntu Server 9.10 /bin/bashและใช่ทุบตีตั้งอยู่ที่

6
จะอ่านไฟล์ในตัวแปรในเชลล์ได้อย่างไร?
ฉันต้องการอ่านไฟล์และบันทึกเป็นตัวแปร แต่ฉันต้องเก็บตัวแปรไว้และไม่เพียงพิมพ์ไฟล์ ฉันจะทำสิ่งนี้ได้อย่างไร ฉันได้เขียนสคริปต์นี้ แต่มันก็ไม่ใช่สิ่งที่ฉันต้องการ: #!/bin/sh while read LINE do echo $LINE done <$1 echo 11111----------- echo $LINE ในสคริปต์ของฉันฉันสามารถให้ชื่อไฟล์เป็นพารามิเตอร์ดังนั้นหากไฟล์มี "aaaa" ตัวอย่างเช่นมันจะพิมพ์ออกมานี้: aaaa 11111----- แต่นี่แค่พิมพ์ไฟล์ลงบนหน้าจอและฉันต้องการบันทึกลงในตัวแปร! มีวิธีง่าย ๆ ในการทำเช่นนี้?
489 shell  unix  sh 

10
วิธีรับรหัสผ่านจากเชลล์สคริปต์โดยไม่ต้องสะท้อน
ฉันมีสคริปต์ที่ทำให้กระบวนการที่ต้องการเข้าถึงระบบป้องกันด้วยรหัสผ่านโดยอัตโนมัติ ระบบสามารถเข้าถึงได้ผ่านโปรแกรมบรรทัดคำสั่งที่ยอมรับรหัสผ่านผู้ใช้เป็นอาร์กิวเมนต์ ฉันต้องการให้ผู้ใช้พิมพ์รหัสผ่านกำหนดให้กับตัวแปร shell จากนั้นใช้ตัวแปรนั้นเพื่อสร้างบรรทัดคำสั่งของโปรแกรมที่เข้าถึง (ซึ่งแน่นอนจะสร้างเอาต์พุตสตรีมที่ฉันจะประมวลผล) ฉันเป็นโปรแกรมเมอร์เชลล์ที่มีความสามารถพอสมควรใน Bourne / Bash แต่ฉันไม่รู้วิธีรับอินพุตของผู้ใช้โดยไม่ต้องสะท้อนไปยังเทอร์มินัล มีใครช่วยได้บ้าง
424 bash  shell  scripting  sh 

22
วิธีรันคำสั่ง mongo ผ่านเชลล์สคริปต์
ฉันต้องการรันmongoคำสั่งในเชลล์สคริปต์เช่นในสคริปต์test.sh: #!/bin/sh mongo myDbName db.mycollection.findOne() show collections เมื่อฉันรันสคริปต์นี้ผ่าน./test.shดังนั้นการเชื่อมต่อกับ MongoDB จะถูกสร้างขึ้น แต่คำสั่งต่อไปนี้จะไม่ถูกดำเนินการ วิธีรันคำสั่งอื่น ๆ ผ่าน shell script test.sh?
403 mongodb  bash  shell  sh 

2
ฉันจะแบ่งคำสั่งเชลล์ไปยังหลายบรรทัดได้อย่างไรเมื่อใช้คำสั่ง IF
ฉันจะแบ่งคำสั่งผ่านหลายบรรทัดในเชลล์ได้อย่างไรเมื่อคำสั่งเป็นส่วนหนึ่งของifคำสั่ง งานนี้: if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1 fi สิ่งนี้ใช้ไม่ได้: # does not work: if ! fab --fabfile=.deploy/fabfile.py \ --forward-agent \ --disable-known-hosts deploy:$target; then rc=1 fi แทนที่จะได้รับคำสั่งทั้งหมดฉันได้รับ: ./script.sh: line 73: --forward-agent: command not found สิ่งที่ขาดหายไปจากความเข้าใจใน Bash ของฉันที่จะช่วยให้ฉันเข้าใจเรื่องนี้และปัญหาที่คล้ายกันในอนาคต
384 syntax  sh 

24
ฉันจะดูพฤติกรรมของ readlink ของ GNU บน Mac ได้อย่างไร
บน Linux readlinkยูทิลิตี้ยอมรับตัวเลือก-fที่ตามลิงค์เพิ่มเติม ดูเหมือนจะไม่สามารถใช้งานได้บน Mac และระบบที่ใช้ BSD สิ่งที่เทียบเท่าจะเป็นอย่างไร นี่คือข้อมูลการดีบักบางส่วน: $ which readlink; readlink -f /usr/bin/readlink readlink: illegal option -f usage: readlink [-n] [file ...]
377 macos  freebsd  sh 

11
ฉันจะมีการขึ้นบรรทัดใหม่ในสตริงเป็น sh ได้อย่างไร?
นี้ STR="Hello\nWorld" echo $STR ผลิตเป็นเอาท์พุท Hello\nWorld แทน Hello World ฉันควรทำอย่างไรเพื่อให้มีการขึ้นบรรทัดใหม่ในสตริง หมายเหตุ: คำถามนี้ไม่ได้เกี่ยวกับก้อง ฉันรู้echo -eแต่ฉันกำลังมองหาโซลูชันที่อนุญาตให้ส่งผ่านสตริง (ซึ่งรวมถึงการขึ้นบรรทัดใหม่) เป็นอาร์กิวเมนต์สำหรับคำสั่งอื่น ๆที่ไม่มีตัวเลือกที่คล้ายกันเพื่อตีความหมาย\nของการขึ้นบรรทัดใหม่
339 sh 

18
วิธีการรันงาน cron ภายในคอนเทนเนอร์นักเทียบท่า?
ฉันพยายามเรียกใช้ cronjob ภายในคอนเทนเนอร์ docker ที่เรียกใช้เชลล์สคริปต์ เมื่อวานนี้ฉันค้นหาทั่วทั้งเว็บและล้นสแต็ก แต่ฉันหาโซลูชันที่ใช้งานไม่ได้จริงๆ ฉันจะทำสิ่งนี้ได้อย่างไร แก้ไข: ฉันได้สร้างที่เก็บ github (แสดงความคิดเห็น)กับคอนเทนเนอร์ cron นักเทียบท่าที่ใช้งานได้ซึ่งเรียกใช้เชลล์สคริปต์ในช่วงเวลาที่กำหนด
275 docker  cron  containers  sh 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.